Git:变基术语

6

鉴于以下分支

     A---B---C topic (HEAD)
    /
D---E---F---G master

并运行该命令

git rebase master

这是否意味着我们是在

  • topic/HEAD基于master重新定位,还是…
  • mastertopic/HEAD重新定位?

git-rebase手册中我无法推断出我应该如何用一句话来表达这个操作。

PS:我知道rebase是什么以及它的作用,我只是想知道如何“使用”该命令,因为第一个参数实际上称为upstream


2
这是前者(“在主分支上重新定位话题”)。当您给git rebase一个单一参数时,该参数 - 在本例中为master - 具有两个作用:它告诉哪些提交要复制,并告诉复制的位置。您当前的分支提供要复制的提交。 - torek
3个回答

5
结果分支布局如下:
      A---B---C ("dangling", waiting for garbage collection)
     /
D---E---F---G---A'---B'---C' < topic (HEAD)
            ^
          master

您将使用master重新设置(rebasing)您的topic(当前)分支,从而更改A(现在是A',因为它不是完全相同的提交)的祖先从E到G。


我本来不想自己编辑它,但为了清晰起见,我会在你的图表上添加提交A、B和C(仍然存在,其中A指向E),并注释为“悬挂”,以使操作的复制方面更加清晰。无论如何,我已经点赞了,这是一个有用的答案。 - Romain Valeri
@RomainValeri:如果有远程分支,那就是真的了,但没有迹象表明有。 - Makoto
1
远程分支?rebase 完全是本地操作,你是什么意思?好的,我已经编辑了一下,只是为了向你展示我的意思,当然随时可以回滚。 - Romain Valeri
我认为这很好。没有真正的抱怨。 - Makoto

4

首先,将主分支(master)及之前的提交记录作为整个工作进度的基础。当前主分支(master)的最新提交记录成为您的工作的再次基础。

然后将您的工作进度(rebasing)在主分支(master)工作进度的基础上进行合并。您的提交记录会被添加在主分支(master)最后一个提交记录的后面。

感谢Makoto提供的图示说明上述内容。如果需要更多参考资料,我个人认为Atlassian的这篇教程讲得非常好,同时还有类似的图示说明。基本rebasing只需两分钟即可了解,接下来就是交互式rebasing,这是一个非常实用的功能!


谢谢确认。对我来说似乎更有意义。 - user187676
我知道如何变基以及它的作用,只是不确定如何将命令放在正确的句子中(因为第一个参数在技术上被称为“上游”)。 - user187676
毫无疑问,Erik。我只是用那种措辞强调了它,希望你不会再怀疑哪个是基于哪个重新设置的。 :) - GolezTrol

1
我只想知道如何使用命令行说话,因为第一个参数实际上被称为"上游(upstream)"。 我一直在心里默读这个git rebase master 命令: 将当前的分支置于master(上游分支)之上进行变基操作。 也就是说:从master(不包括此处)开始到当前分支HEAD之间的所有提交都会在master上重放。 还可以查看 "git rebase, keeping track of 'local' and 'remote'"。

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