Git - 关于合并,反转和快进的混乱

时间:2014-02-28 17:21:24

标签: git

现在假设我在master分支上,当前提交是c0。现在我执行git branch fb并在mc1分支上再进行2次提交mc2master。之后我执行git checkout fb并提交fc1并执行git rebase master。现在fc1应该位于mc1mc2之上。最后我做git checkout mastergit rebase fb并快速前进。我很担心这个快进,虽然我知道git做出了明智的决定。但是,根据rebase的定义,git应该将c0视为两个分支的共同祖先,因此它应该在mc1之上再次应用mc2fb - 虽然我知道这将是一个愚蠢的举动,但为什么不这样做呢?

此外,在最后一步中,git rebase fbgit merge fb是否会有所不同,因为两者都会进行快进?如果我在这里做git merge fb,即使父母一方是另一方的祖先,新提交也会有两个父母吗?

1 个答案:

答案 0 :(得分:1)

在rebase之前:

Before the rebase

git rebase master之后:

After <code>git rebase master</code>

因此mc2是共同的祖先,而不是c0。因为mastermc2之后不包含任何提交,因此可以快速转发。


您可以使用git merge选项强制--no-ff不进行快进。它会是这样的:

After <code>git merge --no-ff fb</code>