Git rebase:在提交之间移动代码片段



我正在寻找一种简单的方法来重新排列补丁之间的片段。假设我有一个连续两次提交的repo:

git init
echo -e "foonnbarnnbaz" > file
git add file 
git commit -m 'initial'
sed -i 's/bar/boom/' file 
git commit -am 'first'
sed -i 's/boom/qux/' file 
sed -i 's/baz/quux/' file 
git commit -am 'second'
所以我的提交历史是这样的:
   first
--- a/file
+++ b/file
@@ -1,5 +1,5 @@
 foo
-bar
+boom
 baz

   second
--- a/file
+++ b/file
@@ -1,5 +1,5 @@
 foo
-boom
+qux
-baz
+quux

但是我想让它看起来像这样:

   first
--- a/file
+++ b/file
@@ -1,5 +1,5 @@
 foo
-bar
+boom
 quux

   second
--- a/file
+++ b/file
@@ -1,5 +1,5 @@
 foo
-boom
+qux
-baz
+quux

是否有一种简单的方法来做到这一点,用rebase和各种命令与-p选项?我认为我可以做一个交互式的重基,编辑第一条评论,使用git reset -p删除更改的最后一部分,将其保存为临时提交,完成重基,然后再做一个交互式的重基,将临时提交压缩到下面的一个。这需要大量的思考和努力,但在现实世界的情况下,我想重新安排两个(或更多)大的提交,需要在两个方向上携带许多片段,可能会跳过一些中间提交。有没有更简单的方法来做到这一点,而不创建临时提交?

除非我误解了问题…

你可以创建一个单独的分支,在其中进行中间提交,然后使用--squash将所有提交合并到一个提交中。

参见使用Git将我的最后一次X提交合并在一起

最新更新