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

git rebase:在提交之间移动代码段,git,git-rebase,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 '

我正在寻找一种在补丁之间重新排列代码片段的简单方法。假设我有一些连续两次承诺的回购协议:

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

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

除非我误读了问题

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


请参见

除非我误读了问题

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


这似乎并不简单,但我可能误解了你的意思。做一个交互式重基并将
pick
更改为
squash
并不是很难的部分。这看起来并不简单,但我可能误解了你的意思。执行交互式重基并将
pick
更改为
squash
并非困难的部分。