如何在主分支历史记录中更早地移动多个分支共有的 git 提交?

问题描述

我有一个看起来像这样的 git 仓库:

   /C''-D''-F (featureB)
A-B-C---D---E (main)
   \C'--D'--G (featureA)

我想将 CD 的常见提交更早地移到 main 分支中 历史,以便回购看起来像这样:

       /F (featureB)
A-B-C-D-E (main)
       \G (featureA)

需要注意的是,C/C'/C''D/D'/D'' 提交修改的代码相同,但由于在不同的分支,它们都有不同的提交哈希。

解决方法

让我们重新表述手头的任务:

我想获取一个分支的 N 个最新提交的更改,并以它们的父提交变成不同的方式移动/复制它们。

这就是 git rebase 允许您执行的操作。您可以告诉它要复制的提交范围以及要将其复制到哪个父提交:

git rebase --onto main^ featureA^ featureA
git rebase --onto main^ featureB^ featureB

会将 featureA 和 featureB 的最新提交变基到分支 main 的倒数第二次提交。您也可以直接使用提交哈希:

git rebase --onto D D' featureA
git rebase --onto D D'' featureB
,

[C 和 D]...修改相同的代码,但在三个分支中具有不同的提交哈希。

在这种情况下,您可能希望首先从两个功能分支中删除 C 和 D 提交,然后重新定位到主分支。您可以使用 git rebase -i 来完成第一部分,对您不想要的提交使用 drop 选项。然后(从每个分支)git rebase mainmain 分支的当前状态之上重放每个分支中的提交。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...