当我做git merge
从另一个分支到当前工作区,git 有时会进行新的提交:
Merge remote-tracking branch xxx into xxx
有时,它不会:
Fast-forward
... src files ...
那么什么决定了是否应该创建提交呢?
所谓的“快进”合并不会产生提交,而其他合并(通常称为“章鱼合并”(现在你明白为什么 github 的 mascott 是 octocat 了))会产生提交。
基本上,当您的分支没有发散时,就会发生快进。
假设你想合并一个分支foo
in the master
分支。如果这些分支没有分歧,你就会有这样的历史(每个*
代表一次提交):
*---* (master)
\
*---*---* (foo)
在这种情况下,合并是快进因为(根据图论,这是 git 图的底层基础),master
可以从以下位置到达foo
。换句话说,你只需要移动master
参考foo
,你就完成了:
*---*
\
*---*---* (master, foo)
当你的分支发散时:
*---*---* (master)
\
*---*---* (foo)
您必须创建一个提交来“加入”两个分支:
↓
*---*---*-------* (master)
\ /
*---*---* (foo)
箭头指向的提交是合并提交,并且有两个父提交(前一个提交)master
分支尖端和当前foo
枝尖)。
请注意,您可以强制 Git 创建合并提交以进行快进合并--no-ff
option.
我强烈推荐阅读http://think-like-a-git.net/ http://think-like-a-git.net/为了更好地理解图论如何应用于 git(你不需要知道图论,你需要知道的一切都在网站上),这将使使用 Git 变得非常容易:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)