如何在主分支历史中更早地移动 git 对多个分支的共同提交?
How to move git commits common to multiple branches earlier in the main branch history?
我有一个 git 存储库,如下所示:
/C''-D''-F (featureB)
A-B-C---D---E (main)
\C'--D'--G (featureA)
我想将公共提交 C
和 D
移到 main
分支的更早位置
历史使回购看起来像这样:
/F (featureB)
A-B-C-D-E (main)
\G (featureA)
重要的是要注意 C
/C'
/C''
和 D
/D'
/D''
提交修改代码相同,但由于在不同的分支中,它们都有不同的提交哈希值。
[C and D]...modify the code identically but have different commit hashes across the three branches.
在这种情况下,您可能需要先从两个功能分支中删除 C 和 D 提交,然后再变基到主分支。您可以使用 git rebase -i
来完成第一部分,对您不想要的提交使用 drop
选项。然后(从每个分支)git rebase main
在 main
分支的当前状态之上重播每个分支中的提交。
让我们重新表述手头的任务:
I want to take the changes of the N latest commits of a branch and move/copy them in a way that their parent commit becomes a different one.
这就是 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
我有一个 git 存储库,如下所示:
/C''-D''-F (featureB)
A-B-C---D---E (main)
\C'--D'--G (featureA)
我想将公共提交 C
和 D
移到 main
分支的更早位置
历史使回购看起来像这样:
/F (featureB)
A-B-C-D-E (main)
\G (featureA)
重要的是要注意 C
/C'
/C''
和 D
/D'
/D''
提交修改代码相同,但由于在不同的分支中,它们都有不同的提交哈希值。
[C and D]...modify the code identically but have different commit hashes across the three branches.
在这种情况下,您可能需要先从两个功能分支中删除 C 和 D 提交,然后再变基到主分支。您可以使用 git rebase -i
来完成第一部分,对您不想要的提交使用 drop
选项。然后(从每个分支)git rebase main
在 main
分支的当前状态之上重播每个分支中的提交。
让我们重新表述手头的任务:
I want to take the changes of the N latest commits of a branch and move/copy them in a way that their parent commit becomes a different one.
这就是 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