假设我有一个基于主分支的分支,它以合并提交结束:
使用交互式 rebase 在
现在,我想在
想要的结果是这样的:
我尝试使用以下命令:
有没有一种简单的方式,可以像这样使用交互式 rebase 在分支上添加提交呢?请注意,我可以考虑一个稍微复杂一点的解决方案,比如在
--A---C<master]---D---E---F<my-feature]
\ /
B
使用交互式 rebase 在
D
和 E
之间添加提交 X
很简单 - 我运行以下命令:git rebase -i master
,将提交 D
的操作设置为 edit
,然后重新排列提交。重排后,我在此刻创建新的提交,然后继续 rebase。现在分支看起来像这样:...C<master]---D---X---E'---F'<my_freature]
。现在,我想在
C
和 D
之间添加一个提交。想要的结果是这样的:
C<master]---X---D'---E'---F'<my_freature]
。我尝试使用以下命令:
git rebase -i master~
,想要将合并提交C
设置为edit
。但是交互式 rebase 忽略了合并提交 C
,只提供了链 A--B--D--E
,所以无法保留合并提交 C
。有没有一种简单的方式,可以像这样使用交互式 rebase 在分支上添加提交呢?请注意,我可以考虑一个稍微复杂一点的解决方案,比如在
master
上创建新分支 tmp
,将提交 X
提交到它上面,然后将 my-feature
重新基于 tmp
进行 rebase,但我只是好奇是否有一种简单而直接的方法可以使用交互式rebase实现。
git rebase -h
告诉我--preserve-merges
或-p
选项尝试重新创建合并而不是忽略它们。也许这也能解决你的问题? - joanis-p
是解决方案。你在第一条评论中提出的建议非常不方便,当你将一个提交移动到一个正在改变的代码库时,你会遇到更多更糟糕或“奇怪”的合并冲突,而如果你直接检出旧的主分支,在其上插入一个新的提交,然后继续交互式地重置它,就不会有这样的问题。 - amik