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
并非困难的部分。