有没有一种方法可以简单地在提交前加上交互式变基?
Is there a way to simply prepend a commit with interactive rebase?
假设我有一个基于 master 的分支,它以合并提交结尾:
--A---C<master]---D---E---F<my-feature]
\ /
B
在 D
和 E
之间使用交互式 rebase 添加提交 X
很简单 - 我 运行
git rebase -i master
,将提交 D
操作设置为 edit
,rebase D
后 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
,但是交互式变基以某种方式忽略了合并提交 C
并且只提供链 A--B--D--E
,所以变基导致合并提交丢失 C
.
有没有一种简单的方法可以像这样使用交互式 rebase 预先提交对分支的提交?
请注意,我可以想出一个 更复杂的 解决方案,例如在 master
上创建新分支 tmp
,并向其提交 X
然后将 my-feature
变基到 tmp
,我只是好奇是否有一种简单直接的交互式变基方法。
我刚刚成功重现了您的场景,并通过将 -p
选项 (--preserve-merges
) 添加到 `git rebase:
在 C 和 D 之间插入了提交 X
git rebase -i -p master^
其余工作流程如您所述:告诉 rebase 编辑合并提交,手动插入新提交并以 git rebase --continue
结束。
顺便说一句,很棒的工作流程!我想我会用它。
编辑:我用 Git 2.4 测试了这个解决方案。如果你有更新版本的 Git,@torek 建议使用更安全的 --rebase-merges
选项而不是 --preserve-merges
。请参阅下面的评论以获取解释。
假设我有一个基于 master 的分支,它以合并提交结尾:
--A---C<master]---D---E---F<my-feature]
\ /
B
在 D
和 E
之间使用交互式 rebase 添加提交 X
很简单 - 我 运行
git rebase -i master
,将提交 D
操作设置为 edit
,rebase D
后 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
,但是交互式变基以某种方式忽略了合并提交 C
并且只提供链 A--B--D--E
,所以变基导致合并提交丢失 C
.
有没有一种简单的方法可以像这样使用交互式 rebase 预先提交对分支的提交?
请注意,我可以想出一个 更复杂的 解决方案,例如在 master
上创建新分支 tmp
,并向其提交 X
然后将 my-feature
变基到 tmp
,我只是好奇是否有一种简单直接的交互式变基方法。
我刚刚成功重现了您的场景,并通过将 -p
选项 (--preserve-merges
) 添加到 `git rebase:
git rebase -i -p master^
其余工作流程如您所述:告诉 rebase 编辑合并提交,手动插入新提交并以 git rebase --continue
结束。
顺便说一句,很棒的工作流程!我想我会用它。
编辑:我用 Git 2.4 测试了这个解决方案。如果你有更新版本的 Git,@torek 建议使用更安全的 --rebase-merges
选项而不是 --preserve-merges
。请参阅下面的评论以获取解释。