前言
上一节讲到了分支的创建、删除、切换等操作。
这一节主要是关于分支合并这一系列的学习。
merge命令
我们平时在合并代码时,总是会遇见如下两种情形
- 没有任何冲突,Git会自动帮我们解决了所有冲突
- 有冲突,Git帮我们解决了部分冲突,但有一部分冲突无法解决
所以在merge过程中git到底做了写什么呢?是如何做的呢?
使用
# 将某个分支合并到当前分支
git merge <localBranch>
# 将多个分支合并到当前分支
git merge <localBranch> <otherLocalBranch>
Git如何自动合并冲突
Git能解决所有冲突
先有如下两个分支
a分支下的app.txt
he is program
I am useless
Fit
b分支下的app.txt
I'm program
I am useless
Git
现在我们要将a分支合并到b分支,假设我们是git merge时的程序,此时我们该如何合并?
是不是发现自己也束手无策?如果现在告诉你这两个分支都来自下面这个版本呢?
master分支下的app.txt
I'm program
I am useless
Fit
是不是瞬间就有了思路,知道该如何合并了,其实Git内部也是这样做的。
当Git能自动合并所有冲突时,git会自动生成一个commit记录,commit记录附带的信息是这样的—— Merge branch into
Git不能解决所有冲突
当Git遇到自身无法解决的冲突时,会在控制台显示冲突所在的位置。这时Git又做了什么呢?
- 此时Git无法创建提交。Git通常会在合并冲突后自动创建提交,而在发生冲突的情况下,我们必须要先解决问题,然后在收到提交
- 将无冲突部分的修改添加到暂存区中
- 在无法解决的冲突部分插入冲突的标志,即
<<<<<<<HEAD
什么情形下会出现这种冲突?
答:当对同一个文件的相同部分做出不同修改时,就会出现这种情形,此时需要我们根据实际情况手动合并冲突。
合并小技巧
当我们遇见这种情形时,可以进行如下快捷操作
冲突时,想要全部采用自己(或者他人的)代码
# 完全采用自己的
git checkout --ours <file>
# 完全采用他人的
git checkout --theirs <file>
总结
merge命令是我们很常用的一个命令,但我们大多都不知道其内部是如何操作的,本章主要讲解了其使用方法以及内部是如何做的。让我们对merge这个命令有了更深层次的认识。
往期Git
「03」Git之add、branch、stash和checkout命令
「02」Git之.gitignore文件配置
「01」Git之版本控制