我正在寻找一种简单的方法来重新排列补丁之间的片段。假设我有一个连续两次提交的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提交合并在一起