git rebase:在提交之间移动片段

时间:2015-08-17 21:41:15

标签: git git-rebase

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

git init
echo -e "foo\n\nbar\n\nbaz" > 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

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

1 个答案:

答案 0 :(得分:0)

除非我误读了这个问题......

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

请参阅Squash my last X commits together using Git