这篇文章主要介绍了详解git merge命令应用的三种情景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
一、git merge 命令应用的三种情景
1.1 “快进”(无冲突)
master分支
假设现在只有一个默认的 master 分支,并提交了3次,B0、B1和B2都是提交对象。
首先要清楚,每次产生的提交对象会包含一个指向上次提交对象(父对象)的指针,所以图中B0、B1和B2之间的箭头是指针指向父对象的意思,真正的提交顺序还是B0到B1再到B2。同时 master 指针指向最新的提交B2。
另外Git中还有一个名为 HEAD 的特殊指针,它是一个指针,指向当前所在的本地分支(可以将 HEAD想象为当前分支的别名)。
dev新分支
现在新建一个分支并切换到新分支。
$ git checkout -b dev
Switched to a new branch 'dev'
它是下面两条命令的简写:
$ git branch dev
$ git checkout dev
因为是在B2创建 dev,所以新分支 dev 指向B2。另外从分支 master 切换到分支 dev,所以HEAD指向当前分支 dev。
在 dev 分支工作并提交了2次:
合并dev和master
在分支 dev 的工作结束,切换到分支 master ,然后把 dev 合并到 master 上:
$ git checkout master
Switched to branch 'master'
$ git merge dev
Merge made by the 'recursive' strategy.
test-2.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
由于当前 master 分支所指向的提交是你当前提交(dev的提交)的直接上游,所以 Git 只是简单的将 master 指针向前移动。 换句话说,当你试图合并两个分支时,如果顺着一个分支走下去能够到达另一个分支,那么 Git 在合并两者的时候,只会简单的将指针向前推进(指针右移),因为这种情况下的合并操作没有需要解决的分歧——这就叫做 “快进(fast-forward)”。合并结果如下:
最后,你可以删除 dev 分支,因为你已经不再需要它了 —— master 分支已经指向了同一个位置。 你可以使用带 -d 选项的 git branch 命令来删除分支:
$ git branch -d dev
1.2 非“快进”,修改不同文件。(无冲突)
当在新分支 dev 进行了一次提交B3,再回到分支 master 又进行一次提交 B4。