Git:如何合并上游更改而不导致合并提交?

11

我有(提交是按字母顺序创建的)

origin/topic  A-B-C-D-W-X

topic         A-B-C-D-Y-Z

有没有办法让我的 topic 分支看起来像这样?

A-B-C-D-W-X-Y-Z

不引入合并提交,怎么做?


通常我会执行

$ git checkout topic
$ git fetch origin
$ git merge --ff-only origin/topic

但由于YZ是在WX之后提交的,因此无法使用快速转发。

我怀疑一些巧妙的变基或挑选可能会起作用,但我无法理解它 :{

3个回答

13

您可以尝试以下方式:

git checkout topic
git pull --rebase origin topic

请查看fetch手册中有关变基选项的注释。

我建议使用类似于git-smart的工具,它会在可能的情况下进行快进合并(更快),如果不行,则进行变基。如果您有本地更改,它还会将其保存,并向您总结拉取的远程更改。


这真是太不可思议了...现在要花时间真正理解它是如何工作的... - Mulan
1
@naomik 记住,你可以把 Git 看作是一个提交记录的树形结构,每个提交记录上都贴着便利贴(代表引用和分支)。当你进行变基操作时,你只需要复制/移动提交记录并重新应用便利贴即可。 - user456814

7
作为 mamapitufo's answer 的替代方案,您也可以执行以下操作,这将给您完全相同的结果:
git fetch origin
git rebase origin/topic topic

最后一个topic参数是可选的,如果您已经检出了它。

3

如果您已经检出了topic并获取了跟踪origin/topic(看起来是这样),您可以直接执行以下操作:

git rebase

我给mamapitufo点了个赞。


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