1

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

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

我想在分支历史记录中移动常见的提交CD更早的位置,main以便 repo 看起来像这样:

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

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

4

2 回答 2

4

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

我想对分支的 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
于 2021-07-17T21:01:55.140 回答
1

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

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

于 2021-07-17T20:55:44.263 回答