版本控制工具之Git的基础使用教程

Git

Git是一个分布式版本控制系统,由Linux之父Linus Torvalds 开发。它既可以用来管理和追踪计算机文件的变化,也是开发者协作编写代码的工具。

本文将介绍 Git 的基础原理、用法、操作等内容。

一、基础概念

1.1 版本控制系统

版本控制系统(Version Control System,VCS)是一种管理代码或文档变更的软件。VCS 可以帮助开发者记录、查看、比较、合并和恢复文件的版本。常见的 VCS 有 Git、Subversion(SVN)、Perforce 等。

1.2 Git

Git 是一个开源的分布式版本控制系统,由 Linus Torvalds 于 2005 年创建。与集中式版本控制系统不同,Git 是一种分布式版本控制系统,意味着每个开发者都拥有一个完整的代码库,可以在本地进行代码的版本控制和修改。与其他 VCS 相比,Git 具有以下优势:

  • 高效性:Git 使用一种名为快照(Snapshot)的方式来存储版本,而不是基于差异的方式,因此在合并分支等操作上更加高效。
  • 分布式:与集中式版本控制系统不同,每个Git工作目录都是一个完整的仓库,拥有完整的历史记录和版本追踪能力,不依赖于网络连接或中心服务器。
  • 分支管理:Git的一个核心特点是强大的分支管理系统。在Git中创建新的分支、合并分支、删除分支都非常简单,极大提高了开发者进行并行开发的效率。
  • 安全性:Git 有完整的 SHA-1 哈希校验机制,保证文件内容不被篡改。
  • 开源: Git是免费和开放源代码的,任何人都可以查阅代码来了解其工作原理或者根据需求进行修改。

1.3 Git 的工作流程

Git 的工作流程可以分为三个阶段:工作目录(Working Directory)、暂存区(Staging Area)和版本库(Repository)。其中,工作目录是指本地的工作区,用于进行开发工作,暂存区是一个缓存区,用于存放待提交的修改,版本库则是存放完整历史版本的地方。

工作区(Working Directory):这是你电脑上可见的,实际处理的文件。这些文件可能是已经修改的或尚未加入Git的版本控制。

暂存区(Staging Area 或 Index):英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。通过git add 命令可以增加文件到暂存区,使用 git rm 命令可以从暂存区删除文件,使用 git commit 命令, 将暂存区的文件提交到Git仓库。

版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

下面是一个简单的 Git 工作流程示意图:

二、Git 的安装和配置

2.1 Git 的安装

在 Windows 和 macOS 系统中,可以直接从 Git 官网下载安装程序进行安装(这里就不讲解了因为网上有很多安装教程)。在 Linux 系统中,可以使用系统包管理器进行安装,例如在 Ubuntu 系统中,可以使用以下命令进行安装:

$ sudo apt-get update
$ sudo apt-get install git

2.2 Git 的配置

安装完 Git 后,需要进行一些基本的配置,可以通过以下命令设置用户名和邮箱:

$ git config --global user.name "Your Name"
$ git config --global user.email "your.email@example.com"

还可以通过以下命令来设置默认文本编辑器和比较工具:

$ git config --global core.editor vim
$ git config --global merge.tool vimdiff

三、Git 的常用命令

3.1 创建仓库

在 Git 中,可以使用 git init 命令创建一个新的仓库。

例如,要在当前目录下创建一个名为 myrepo 的新仓库,可以使用以下命令:

$ mkdir myrepo
$ cd myrepo
$ git init

3.2 添加文件

在 Git 中,可以使用 git add 命令将文件添加到暂存区。例如,要将当前目录下的 index.html 文件添加到暂存区,可以使用以下命令:

$ git add index.html

如果要将当前目录下的所有文件添加到暂存区,可以使用以下命令:

注意一定要加后边的 “点”

$ git add .

3.3 提交修改

在 Git 中,可以使用 git commit 命令将暂存区的修改提交到版本库中。

例如,要将暂存区的修改提交并添加一条提交信息,可以使用以下命令:

$ git commit -m "Add index.html"

3.4 查看状态

在 Git 中,可以使用 git status 命令查看当前仓库的状态。

例如,要查看当前仓库的状态,可以使用以下命令:

$ git status

3.5 查看提交历史

在 Git 中,可以使用 git log 命令查看提交历史。

例如,要查看当前仓库的提交历史,可以使用以下命令:

$ git log

3.6 分支管理

在 Git 中,可以使用 git branch 命令管理分支。

例如,要创建一个名为 dev 的新分支,可以使用以下命令:

bash
$ git branch dev

要切换到 dev 分支,可以使用以下命令:

$ git checkout dev

3.7 合并分支

在 Git 中,可以使用 git merge 命令将一个分支的修改合并到当前分支中。

例如,要将 dev 分支的修改合并到当前分支中,可以使用以下命令:

$ git merge dev

3.8 撤销修改

在 Git 中,可以使用 git checkout 命令撤销对文件的修改。

例如,要撤销对 index.html 文件的修改,可以使用以下命令:

$ git checkout index.html

3.9 远程仓库

在 Git 中,可以使用 git remote 命令管理远程仓库。

例如,要添加一个名为 origin 的远程仓库,并将其指向一个 URL,可以使用以下命令:

$ git remote add origin https://github.com/username/myrepo.git

要将本地仓库的修改推送到远程仓库,可以使用以下命令:

$ git push origin master

其中 origin 是远程仓库的名称,master 是要推送到远程仓库的分支名称。

要从远程仓库中获取最新的代码,可以使用以下命令:

$ git pull origin master

其中 origin 是远程仓库的名称,master 是要拉取的分支名称。

3.10 其他常用命令

git clone:从远程仓库克隆一个本地仓库。

git diff:查看两个版本之间的差异。

git reset:撤销最近的提交,并将修改移动到暂存区。

git revert:撤销指定的提交,并创建一个新的提交来表示该撤销操作。

四、Git 的工作流程

Git 的工作流程包括以下几个步骤:

  1. 初始化仓库:使用 git init 命令将当前目录初始化为一个 Git 仓库。

  2. 添加文件:使用 git add 命令将修改的文件添加到本地仓库的暂存区中。

  3. 提交变化:使用 git commit 命令将暂存区中的修改提交到本地仓库中,并创建一个新的版本记录。

  4. 查看状态:使用 git status 命令查看当前仓库的状态,包括已修改的文件、已添加到暂存区的文件、未跟踪的文件等。

  5. 查看日志:使用 git log 命令查看当前仓库的提交历史记录,包括作者、时间戳、提交说明等信息。

  6. 远程操作:使用 git remote 命令管理远程仓库,并使用 git pushgit pull 命令与远程仓库进行同步操作。

  7. 分支管理:使用 git branch 命令创建、查看、切换和删除分支,以支持并行开发和版本控制。

  8. 解决冲突:当多个开发者同时修改同一个文件时,可能会产生冲突。使用 git mergegit rebase 命令解决冲突,将修改合并到一个版本中。

以下是一个典型的 Git 工作流程示例:

#从远端仓库克隆项目到自己电脑
$ git clone https://github.com/username/myrepo.git
$ cd myrepo
# 在本地仓库中进行修改
$ git add .
$ git commit -m "Add new feature"
$ git push origin master
# 从远程仓库中拉取最新的代码
$ git pull origin master

五、常见问题解答

6.1 如何解决冲突?

在协作开发过程中,当两个开发者修改了同一个文件的同一行代码时,就会发生冲突。解决冲突的方法通常有以下几种:

手动解决冲突:手动合并两个开发者的代码,并提交修改到版本库中。

使用 Git 的合并工具:Git 自带了合并工具,可以使用以下命令进行合并:git mergetool

使用 Git 的补丁功能:可以使用以下命令将差异保存为补丁文件,然后将补丁文件发送给其他开发者进行合并:git diff > patchfile

6.2 如何撤销提交?

如果提交的代码有问题,可以使用以下命令进行撤销:

撤销最近的提交,并将修改移动到暂存区:git reset HEAD~

撤销最近的提交,并将修改移动到工作目录:git reset HEAD~ --hard

6.3 如何删除文件?

要删除文件,可以使用以下命令:

$ git rm filename
$ git commit -m "Delete filename"
$ git push origin master

其中 filename 是要删除的文件名称。

6.4 如何切换分支?

要切换分支,可以使用以下命令:

$ git checkout branchname

其中 branchname 是要切换到的分支名称。

6.5 如何创建标签?

要创建标签,可以使用以下命令:

$ git tag -a v1.0 -m "Version 1.0"
$ git push origin v1.0

其中 v1.0 是标签名称,Version 1.0 是标签说明。

6.6 如何查看提交历史?

要查看提交历史,可以使用以下命令:

$ git log

该命令会列出所有的提交历史记录,包括提交 ID、提交者、提交时间、提交说明等信息。

六、总结

Git 是一款强大的版本控制工具,可以帮助开发人员管理代码、协作开发以及备份代码等任务。本文介绍了 Git 的原理、用法和常用命令,并且介绍了 Git 的工作流程。希望本文对初学者能够提供帮助,让大家能够更好地使用 Git。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter压测问题汇总

缘起 公司的Elasticsearch流量日益减少,经过评估,我们计划迁移到成本更低的Mysql集群上,需要对接口进行压力复测 版本 JDK17(会有兼容性问题,建议使用JDK17之前的版本)Jmeter 5.2.1 windows系统下临时端…

Python-----容器的介绍以及操作

1.列表和元组 1.列表是什么, 元组是什么: 编程中, 经常需要使用变量, 来保存/表示数据. 如果代码中需要表示的数据个数比较少, 我们直接创建多个变量即可. 但是有的时候, 代码中需要表示的数据特别多, 甚至也不知道要表示多少个数据. 这个时候, 就需要用到列表 列表…

论文解读--High-resolution Automotive Radar Point Cloud Imaging and Processing

高分辨汽车雷达点云成像和处理 摘要 汽车雷达具有体积小、硬件成本低、全天候工作、高分辨率等公认的优点,是高级驾驶辅助系统(ADAS)必不可少的一类重要传感器。然而,低角度分辨率和低成像性能的限制很难满足下一阶段ADAS的需要。新兴的4D成像雷达采用多…

C语言数据结构与算法之栈练习2:判断栈是否为空或者是否已满

练习2:判断栈是否为空或者是否已满 需求1:实现一个简单的栈结构,并实现入栈和出栈的功能,编写相关的代码进行测试。 需求2:如果栈已满,则不要再继续入栈,并提示错误信息。如果栈为空&#xff…

计算机视觉与深度学习实战之以Python为工具:基于融合特征的以图搜图技术

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:计算机视觉与深度学习实战-以MATLAB和Python为工具_基于融合特征的以图搜图技术_项目开发案例教程.pdf 一、引言 随着信息技术的飞速发展,图像数据呈…

常量池和运行时常量池以及字符串常量池的区别

1. 常量池 常量池是Java编译器生成的,存储在.class文件中的数据集合,它包含了类中所有的字面量和符号引用。 字面量如字符串、整数、浮点数等;符号引用如类和接口的全名、字段的名称和数据类型、方法的名称和描述符等。常量池的目的是为了减…

SSC369G 双4K高性价比AI IPC方案

一、方案描述 SSC369G 双4K高性价比AI IPC方案采用主芯片SSC369G,内核为CA55四核最高主频为1.5Ghz处理器。SOC内置集成一个64位的四核RISC处理器,先进的图像信号处理器(ISP),高性能的H.265/H.264/MJPEG视频编解码器&a…

每日OJ题_记忆化搜索⑤_力扣329. 矩阵中的最长递增路径

目录 力扣329. 矩阵中的最长递增路径 解析代码1_爆搜递归(超时) 解析代码2_记忆化搜索 力扣329. 矩阵中的最长递增路径 329. 矩阵中的最长递增路径 难度 困难 给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。 对于每…

tcpdump速查表

tcpdump 速查表 -D 列出网络设备 ~]$ sudo tcpdump -D1.eth02.nflog (Linux netfilter log (NFLOG) interface)3.nfqueue (Linux netfilter queue (NFQUEUE) interface)4.any (Pseudo-device that captures on all interfaces)5.lo [Loopback]-i 指定网卡 前面列出的设备可以…

Go语言系统学习笔记(二):进阶篇

1. 写在前面 公司的新业务开发需要用到go语言,虽然之前没接触过这门语言,但在大模型的帮助下,边看项目边写代码也能进行go的项目开发,不过,写了一段时间代码之后,总感觉对go语言本身,我的知识体…

225.用队列实现栈

刷算法题: 第一遍:1.看5分钟,没思路看题解 2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

.net 生成二维码图片

引用nuget包 QRCoder-ImageSharp /// <summary>/// 生成二维码/// </summary>/// <param name"text">内容</param>/// <param name"width">宽度</param>/// <param name"height">高度</param>/…

Linux下多线程相关概念

thread 1.什么是线程1.1 线程优缺点1.2 线程异常1.3 线程用途 2. 进程和线程区别3. 线程控制3.1 POSIX线程库3.2 pthread_create()3.3 线程ID3.4 线程ID地址空间布局pthread_self() 3.5 线程终止pthread_exit函数pthread_cancle函数 3.6 线程等待3.7 分离线程__thread修饰全局变…

Spring Boot | Spring Boot 消息管理 ( 消息中间件 ) 、RabbitMQ“消息中间件“

目录: 一、"消息服务" 概述 :1.1 为什么要使用 "消息服务" ( 消息中间件 ) &#xff1f;① 异步处理② 应用解耦③ 流量削峰④ 分布式事务管理 1.2 常用 "消息中间件" 介绍 :ActiveMQ ( 广泛应用于中小型企业 )RabbitMQ ( 没有特别要求的场景下…

Sylar C++高性能服务器学习记录11 【IO调度模块-知识储备篇】

早在19年5月就在某站上看到sylar的视频了&#xff0c;一直认为这是一个非常不错的视频&#xff0c;由于本人一直是自学编程&#xff0c;基础不扎实&#xff0c;也没有任何人的督促&#xff0c;没能坚持下去&#xff0c;每每想起倍感惋惜。恰逢互联网寒冬&#xff0c;在家无事&a…

如何利用SSL证书让IP实现HTTPS安全访问

在互联网日益发展的今天&#xff0c;数据安全与隐私保护成为了用户和企业共同关注的焦点。HTTPS&#xff08;超文本传输安全协议&#xff09;作为一种广泛采用的安全通信协议&#xff0c;通过加密数据传输&#xff0c;为网站访问提供了安全保障。然而&#xff0c;要实现HTTPS访…

uniapp百度地图聚合

// loadBMap.js ak 百度key export default function loadBMap(ak) {return new Promise((resolve, reject) > {//聚合API依赖基础库,因此先加载基础库再加载聚合APIasyncLoadBaiduJs(ak).then(() > {// 调用加载第三方组件js公共方法加载其他资源库// 加载聚合API// Ma…

Oracle数据库如何插入平方(²)立方(³)字符

第一步&#xff1a;创建数据表&#xff0c;字段一定要是NVARCHAR2类型的 第二步&#xff0c;插入数据用 unistr(1\00b3) 形式的写法 00b3 代表m&#xff0c;00b2代表㎡ SELECT * FROM TESTABC; UPDATE TESTABC set NAME1unistr(1\00b3); UPDATE TESTABC set NAME2unistr(2\00b2…

微信小程序里的地理导航:百度地图API与路径规划实战

微信小程序里的地理导航&#xff1a;百度地图API与路径规划实战 引言&#xff1a;百度地图API与微信小程序的融合准备工作&#xff1a;申请密钥与引入SDK1. 注册百度地图开放平台账号2. 引入百度地图SDK 展示地图&#xff1a;初次接触百度地图组件地图组件基础定位当前用户位置…

【OceanBase诊断调优】—— checksum error ret=-4103 问题排查

适用版本 OceanBase 数据库所有版本。 什么是 checksum data checksum&#xff1a;一个 SSTable 中所有宏块内存二进制计算出来的 checksum 值。反映了宏块中的数据和数据分布情况。如果宏块中数据一致但是数据分布不一致&#xff0c;计算出来的 checksum 也不相等。 column…