为什么git rebase需要3路合并?

时间:2011-12-14 23:12:53

标签: git merge rebase

我正在试图找出为什么rebase需要三方合并。例如,如果我们有

A1 - A2
 \
  B1   

我已经检查了B1,我想表演:

git rebase A2

为什么git合并A2,B1和A1?为什么A2和B1不够用?我的意思是,A2和B1不能作为提交包含树的完整当前快照吗?

1 个答案:

答案 0 :(得分:8)

要执行合并,Git需要找出自共同祖先(A1)以来两个分支中到底发生了什么。正如您所说的那样,Git存储提交/树的快照以便获得实际的更改集,它必须将A2A1B1A1进行比较,并且然后合并那些单独的变更集。

同样的事情发生在rebase中。要在A2上应用B1的更改集,我们首先需要根据A1A2之间的差异计算该更改集。然后我们可以将其应用于B1。您可以将rebase视为类似于自动生成修补程序文件的内容。首先,它从旧分支生成所有这些补丁文件,然后将它们应用到当前的HEAD。

因此,我们需要所有这三个提交来实际计算差异,因为我们无法通过查看提交来弄清楚提交中发生了什么。