Git rebase命令的顺序 - 困惑

5
git-scm中,他们说应该合并的提交被完全移动(作为一个新的提交)到当前分支的顶部:
因此,不需要进行合并操作:

enter image description here

我们使用变基:

enter image description here

注意,C3保持原样。
然而,当我查看git-tower时,他们显示分支不是移动到末尾,而是移动到开头:
“我们想要将branch-B的更改集成到branch-A中,但现在使用rebase。”

enter image description here

变基后:

enter image description here

问题:

这里发生了什么?

git-scm显示已经移动到分支的tip,而git-tower则没有。


除了git-tower插图错误地显示C3移动(而不是复制到新的C3')之外,两个图表都显示了相同的内容。(请注意,git-scm图表还包括首先进行的假设git merge,然后再次取出,因为想法是重新设置而不是合并。) - torek
1
@torek 嗯,它显示了一个 C3*,这意味着这不是同一个 C3。 - VonC
@VonC:啊,实际上我错过了那个星号,因为它被圆圈覆盖了一些! - torek
@RoyiNamir 不是将分支A集成到分支B中,而是将B的祖先包含在A中的提交。您可以通过在A的顶部重新定位B来实现这一点。示例显示的是相反的情况:A的祖先包括来自B的提交:您可以在B的顶部重播A:git rebase branch-B。 - VonC
2
@RoyiNamir:我不喜欢将“将分支___集成到分支___中”的整个想法用文字表达。分支名称只指向单个提交。作为一个解释提交图的人,我们可以自由地扩展跟随图形操作,停在任何我们喜欢的地方,当我们早或晚停止时,我们可能会有不同的感受。因此,“集成”本质上会让人感到困惑。最好只是绘制图形并显示标签的位置。 - torek
显示剩余2条评论
1个回答

5

两者显示的是同一项操作:两个分支都被移动到它们新的上游分支的末端(而不是起点)。

  • experiment is moved on top of master

    git checkout experiment
    git rebase master 
    
  • branch-A is moved on top of branch-B

    git checkout branch-A
    git rebase branch-B
    
我们希望将分支B的更改集成到分支A中。使用命令"git rebase branch-B",可以重新应用分支A上的提交记录到分支B之上,确保任何来自分支B的提交现在都是分支A的一部分:分支B中的更改现在已经合并到了(成为了)分支A的历史记录中。

@RoyiNamir 这取决于您所指的“第一个示例”。如果我们关注分支-A / 分支-B 图像,则第一个图像描述了初始设置:从 C1 开始的 2 个分支(这里没有合并)。然后进行了一个 rebase branch-B,将 branch-A 重放在 branch-B 之上。 - VonC
@RoyiNamir,只有您的git-scm图片在第一张中展示了合并。不要忘记箭头指向的是提交的父级,而不是“下一个提交”。 - VonC
我唯一能理解的方式就是他们把话说糊涂了:https://i.imgur.com/BPVhSaZ.jpg - Royi Namir
所以基本上被变基的分支是A?他们想要将A变基到B?如果是这样,那么现在 - 我明白了。 - Royi Namir
@RoyiNamir 是的:你先 checkout A,然后 rebase B,这意味着“在 B HEAD 之上重放 A 的提交”。这就是我编辑后的答案所说的。 - VonC
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接