现在假设我在master
分支上,当前提交是c0
。现在我执行git branch fb
并在mc1
分支上再进行2次提交mc2
和master
。之后我执行git checkout fb
并提交fc1
并执行git rebase master
。现在fc1
应该位于mc1
和mc2
之上。最后我做git checkout master
和git rebase fb
并快速前进。我很担心这个快进,虽然我知道git做出了明智的决定。但是,根据rebase的定义,git应该将c0
视为两个分支的共同祖先,因此它应该在mc1
之上再次应用mc2
和fb
- 虽然我知道这将是一个愚蠢的举动,但为什么不这样做呢?
此外,在最后一步中,git rebase fb
和git merge fb
是否会有所不同,因为两者都会进行快进?如果我在这里做git merge fb
,即使父母一方是另一方的祖先,新提交也会有两个父母吗?
答案 0 :(得分:1)
在rebase之前:
git rebase master
之后:
因此mc2
是共同的祖先,而不是c0
。因为master
在mc2
之后不包含任何提交,因此可以快速转发。
您可以使用git merge
选项强制--no-ff
不进行快进。它会是这样的: