当我从另一个分支到当前工作区执行 git merge
时,git 有时会进行新的提交:
Merge remote-tracking branch xxx into xxx
有时,它不会:
Fast-forward
... src files ...
那么是什么决定了是否应该创建提交呢?
最佳答案
所谓的“快进” merge 不会产生提交,而其他 merge (通常称为“ Octopus merge ”(现在你明白为什么 github 的吉祥物是 Octopus ))产生提交。
基本上,当您的分支没有发散时,就会发生快进。
假设你想在 foo
分支中 merge 一个分支 master
。如果这些分支没有分歧,您将拥有这样的历史记录(每个 *
代表一次提交):
*---* (master)
\
*---*---* (foo)
在这种情况下, merge 是 快进 因为(根据图论,这是 git 图的底层基础),
master
从 0x231343 可达。换句话说,您只需将 foo
引用移动到 master
,就完成了:*---*
\
*---*---* (master, foo)
当您的分支发散时:
*---*---* (master)
\
*---*---* (foo)
您必须创建一个“加入”两个分支的提交:
↓
*---*---*-------* (master)
\ /
*---*---* (foo)
箭头指向的提交是 merge 提交,有两个父提交(前
foo
分支提示,和当前 master
分支提示)。请注意,您可以使用
foo
选项强制 Git 为快进 merge 创建 merge 提交。我强烈建议阅读 http://think-like-a-git.net/ 以更好地理解图论如何应用于 git(你不需要了解图论,你需要知道的一切都在网站上),这将使使用 Git 变得非常容易:)
关于git - 为什么 git merge 有时会创建提交,有时不会?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20222732/