让我们说我有一个基于master的分支,以合并提交结尾:
--A---C<master]---D---E---F<my-feature]
\ /
B
在X
和D
之间添加带有交互式基础的提交E
很简单-我运行
git rebase -i master
,将提交D
操作设置为edit
,在重新设置D
后停止重新设置基准。那时我只是创建新提交,然后继续重新设置基准。现在,分支看起来像
...C<master]---D---X---E'---F'<my_freature]
。
现在,我想在C
和D
之间添加一个提交。
所需结果:
C<master]---X---D'---E'---F'<my_freature]
我尝试过
git rebase -i master~
我想将合并提交C
设置为edit
,但是交互式重新设置却以某种方式忽略了合并提交C
并仅向我提供链A--B--D--E
,因此重新设置了基础导致丢失合并提交C
。
是否有一种简单的方法可以像这样通过交互式的基础将提交预先提交到分支?
请注意,我可以找到一个更复杂的解决方案,例如在tmp
上创建新分支master
,向其提交X
然后重新建立{{1 }}到my-feature
上,我很好奇,是否有一种简单而直接的交互式变基方法。
答案 0 :(得分:1)
我刚刚成功重现了您的场景,并通过向`git rebase添加-p
选项(--preserve-merges
)在C和D之间插入了提交X。
git rebase -i -p master^
其余工作流程如您所述:告诉rebase编辑合并提交,手动插入新提交并以git rebase --continue
结尾。
顺便说一下,很酷的工作流程!我想我会用它。
编辑:我使用Git 2.4测试了该解决方案。如果您使用的是Git的较新版本,@ torek建议使用更安全的--rebase-merges
选项而不是--preserve-merges
。有关说明,请参见下面的注释。