如何使用合并压缩的提交进行变基

5

我有一个类似于这样的东西

                6---7 (currentBranch)
               /
      3---4---5---8 (initialBranch)
     /
1---2 (master)

我把initialBranch squash合并到了master分支,现在master分支看起来大概是这样的。
1---2---9 where commit '9' is commits 3+4+5+8 squashed together

我的终极目标是将当前分支在远程代码库中进行rebase,使其看起来像这样。
          6---7 (currentBranch)
         /
1---2---9

我需要运行哪些命令才能完成这个任务?

1
你可以使用 git checkout currentBranch; git rebase -i 9 命令,从 TODO 列表中删除所有被压缩并保留为提交 #6 的父提交的提交记录(#3、#4、#5):TODO 文件将包含类似于 "pick 6 \n pick 7" 的内容。这应该可以工作,并且如果提交 #8 带来了无法自动合并的内容,则可能会导致冲突。 - terrorrussia-keeps-killing
1
或者,如果我没记错的话,git checkout currentBranch; git rebase --onto 9 7~2 currentBranch(但我不确定它是否按预期工作)。 - terrorrussia-keeps-killing
你目前尝试了什么? - evolutionxbox
说实话,到目前为止我还没有尝试过太多(在这个例子中)。我以前试图将基础分支变基到压缩提交时的经历导致了所有新更改的重复,其中PR文件差异显示现有更改为新更改,即使主分支已经包含了该更改(作为压缩提交的一部分)。尝试避免搞砸并再次遇到那种情况。 - Azianese
@fluffy,我尝试了你的第一条评论,看起来那就是我想要的一切(除了将更改强制推送到远程存储库)。非常感谢。如果您提交一个答案,我会在这里接受它作为解决方案。 - Azianese
2个回答

2
如果您仍然拥有原始的initialBranchcurrentBranch之间的提交“合并基础”,也就是提交5,那么您可以执行rebase --onto操作:
git rebase --onto master 5 currentBranch

这将在当前的master分支的顶部重放任何在5之后提交的内容(因此是6和7)。


0
如果你仍然拥有"initialBranch",你可以避免查找提交引用的麻烦。
git rebase --onto master initialBranch currentBranch

你的回答可以通过提供更多支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人能够确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

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