![请添加图片描述](https://img-blog.csdnimg.cn/663daf1f293045ac80ff57ff7db531d8.png)
官方免费电子书中文版下载地址:https://git-scm.com/book/zh/v2
此书编写时,git版本是 2.8
本人的运行环境:win11 git 2.35.1
一、运行Git前的配置
二、Git基础
![请添加图片描述](https://img-blog.csdnimg.cn/1c8fc122a915433083fb83ee2aa626e4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW96ams6Zq-6amv,size_20,color_FFFFFF,t_70,g_se,x_16)
![请添加图片描述](https://img-blog.csdnimg.cn/804512f92f254aea8917505bba7ce608.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW96ams6Zq-6amv,size_20,color_FFFFFF,t_70,g_se,x_16)
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。 输出中有两栏,左栏指明了暂存区的状态,右栏指明了工作区的状态。例如,上面的状态报告显示: README 文件在工作区已修改但尚未暂存,而 lib/simplegit.rb 文件已修改且已暂存。 Rakefile 文件已修改,暂存后又作了修改,因此该文件的修改中既有已暂存的部分,又有未暂存的部分。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rY0G2mMc-1649380378281)(./img/FileChangeStateLoop.png)]
请务必记得
如果你仍然想保留对那个文件做出的修改,但是现在仍然需要撤消,我们将会在 Git 分支 介绍保存进度与分支,这通常是更好的做法。
记住,在 Git 中任何 已提交 的东西几乎总是可以恢复的。 甚至那些被删除的分支中的提交或使用 --amend 选项覆盖的提交也可以恢复 (阅读 数据恢复 了解数据恢复)。 然而,任何你未提交的东西丢失后很可能再也找不到了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k5FGszfT-1649387878755)(./img/FileChangeStateLoop.png)]
请务必记得
如果你仍然想保留对那个文件做出的修改,但是现在仍然需要撤消,我们将会在 Git 分支 介绍保存进度与分支,这通常是更好的做法。
记住,在 Git 中任何 已提交 的东西几乎总是可以恢复的。 甚至那些被删除的分支中的提交或使用 --amend 选项覆盖的提交也可以恢复 (阅读 数据恢复 了解数据恢复)。 然而,任何你未提交的东西丢失后很可能再也找不到了。
三、远程仓库
四、打标签
在“分离头指针”状态下,如果你做了某些更改然后提交它们,标签不会发生变化, 但你的新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希才能访问。因此,如果你需要进行更改,比如你要修复旧版本中的错误,那么通常需要创建一个新分支:
$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'
如果在这之后又进行了一次提交,version2 分支就会因为这个改动向前移动, 此时它就会和 v2.0.0 标签稍微有些不同,这时就要当心了。
五、Git别名-设置
六、Git分支模型
![请添加图片描述](https://img-blog.csdnimg.cn/75e165a591eb4d768065bd1485938d85.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW96ams6Zq-6amv,size_20,color_FFFFFF,t_70,g_se,x_16)
![请添加图片描述](https://img-blog.csdnimg.cn/abe74584e6ed4d2db10d3585884b0ae1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW96ams6Zq-6amv,size_20,color_FFFFFF,t_70,g_se,x_16)
非快进合并的原因和过程
在这种情况下,你的开发历史从一个更早的地方开始分叉开来(diverged)。 因为,master 分支所在提交并不是 iss53 分支所在提交的直接祖先,Git 不得不做一些额外的工作。 出现这种情况的时候,Git 会使用两个分支的末端所指的快照(C4 和 C5)以及这两个分支的公共祖先(C2),做一个简单的三方合并:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K7K3L3fV-1649387878757)(./img/merge–no-ff.png)]
和之前将分支指针向前推进所不同的是,Git 将此次三方合并的结果做了一个新的快照并且自动创建一个新的提交指向它。 这个被称作一次合并提交,它的特别之处在于他有不止一个父提交。
![请添加图片描述](https://img-blog.csdnimg.cn/86013dbf484b48dfbe5dfc5cc32158b7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW96ams6Zq-6amv,size_20,color_FFFFFF,t_70,g_se,x_16)
合并冲突
原因:如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们。
执行 $ git merge branchname后
此时 Git 做了合并,但是没有自动地创建一个新的合并提交。 Git 会暂停下来,等待你去解决合并产生的冲突。 你可以在合并冲突后的任意时刻使用 git status 命令来查看那些因包含合并冲突而处于未合并(unmerged)状态的文件。
冲突解决标记
Git 会在有冲突的文件中加入标准的冲突解决标记
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qdinV4r1-1649387878758)(./img/conflictFile.png)]
这表示 HEAD 所指示的版本就是当前分支所在的位置,在这个区段的上半部分(======= 的上半部分),而 iss53 分支所指示的版本在 ======= 的下半部分。 为了解决冲突,你必须选择使用由 ======= 分割的两部分中的一个,或者你也可以自行合并这些内容。 在你解决了所有文件里的冲突之后,对每个文件使用 git add 命令来将其标记为冲突已解决。 一旦暂存这些原本有冲突的文件,Git 就会将它们标记为冲突已解决。 你可以再次运行 git status 来确认所有的合并冲突都已被解决。如果你对结果感到满意,并且确定之前有冲突的的文件都已经暂存了,这时你可以输入 git commit 来完成合并提交。