当我有一个看起来像这样的数字图时:
A - B - C
E - F - G - H
/
I - J
有可能吗?如果有,我需要使用什么命令才能得到这样的结构:
A - B - C - E - F - G - H
/
I - J
我尝试过git rebase,有很多选择,但我没有得到我想要的结果。
我尝试了--on选项,但它创建了一个分支,我需要手动解决冲突。
只需将--rebase-merges
添加到rebase
命令中。如果存在合并冲突,只需解决它们。慢慢来,要有耐心。
这证明了这是可行的。我们从这个拓扑结构开始:
* 1c69c6d (HEAD -> br) h
|
| * 2e08ae7 j
| * e9a2d44 i
* | 2e831e6 g
* | 19d765f f
|/
* dd465e4 e
| * 5167934 (main) c
|/
* ec99741 b
* 0f9a759 a
确信这与第一个图的拓扑结构相同。现在:
% git rebase --rebase-merges main
结果:
* 627ddfe (HEAD -> br) h
|
| * 2734bc2 j
| * 89fb7ba i
* | 4cbffe3 g
* | badcc53 f
|/
* b239c38 e
* 5167934 (main) c
* ec99741 b
* 0f9a759 a
再次,请确信此拓扑结构与您的第二个图相同。QED。
(正如你在评论中所说,大多数提交的SHA不可避免地会发生变化;这就是重新基准。但正如复制的提交消息所示,它们是正确的提交。(
我发现,不必手动解决冲突的实际方法是使用rerere-git的功能。rere用于保留冲突解决方案,并在合并中再次遇到冲突时应用这些解决方案。git repo中有一个名为rerere-train.sh的手工脚本,用于手动训练具有过去合并提交的合并冲突解决方案的rerere。
因此,为了回答我最初的问题,在将rerere-train.sh
脚本下载到父目录后需要运行以下命令:
git config rerere.enabled true
../rerere-train.sh H
git checkout H
git rebase --rebase-merges C
git commit -a
# Here you save the commit message of the merge
git rebase --continue
对于重定基础的分支中的更多合并,可以在每次合并的重定基础之前使用re-re-train.sh。