为什么git rebase需要三方合并?

为什么git rebase需要三方合并?,git,merge,rebase,Git,Merge,Rebase,我试图弄明白为什么rebase需要三方合并。例如,如果我们有 A1 - A2 \ B1 我检查了B1,我想表演: git rebase A2 为什么git合并A2、B1和A1?为什么A2和B1不够?我的意思是,作为提交的A2和B1不包含树的完整当前快照吗?要执行合并,Git需要找出自共同祖先(A1)以来两个分支中到底发生了什么。正如您所说的,Git存储提交/树的快照以便获得实际的更改集,它必须将A2与A1和B1与A1进行比较,然后合并这些单独的更改集 同样的事情也会发生在重基中。

我试图弄明白为什么rebase需要三方合并。例如,如果我们有

A1 - A2
 \
  B1   
我检查了B1,我想表演:

git rebase A2

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

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

同样的事情也会发生在重基中。要在
B1
上应用
A2
的变更集,我们首先需要根据
A1
A2
之间的差异计算变更集。然后我们可以将其应用于
B1
。您可以将重基视为类似于自动生成修补程序文件的东西。首先,它从旧分支生成所有这些补丁文件,然后将它们应用到当前头部


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

谢谢,这就是我试图在我的问题中展示的内容。