git:提交之间的rebase

时间:2014-07-08 01:27:44

标签: git rebase

如何在提交之间进行重新定位:

假设我想在init和commit 3之间进行rebase(将这些提交压缩在一起)

让我说我有

commit 5
commit 4
commit 3
commit 2
commit 1
commit init

如果我这样做

git rebase -i commit 3 

我明白了:

pick commit 3
pick commit 4
pick commit 5

然后当我做

squash commit 3
pick commit 4
pick commit 5

我执行动作,我明白了:

commit 3
commit 2
commit 1
commit init

而不是我想要的。

如何压缩提交init< ---->提交3,而不是提交3< -----> commit 5

提前致谢。

Jenia。

2 个答案:

答案 0 :(得分:4)

待办事项

git rebase -i --root

Git会让你进入一个带

的编辑器
pick commitinit
pick commit2
pick commit3
pick commit4
pick commit5

然后将其更改为

pick commitinit
squash commit2
squash commit3
pick commit4
pick commit5

答案 1 :(得分:1)

您不会使用您显示的命令获得您建议的结果,因为您最终仍应提交提交4和5。要将它们全部压缩在一起,您必须将pick替换为squash es,而不仅仅是用于提交3的那个。

为了在交互式rebase中将一个提交压缩到另一个提交,你必须在之前从你想要压扁的点开始的rebase,这样列表如下所示:

pick commit 2
pick commit 3
pick commit 4
pick commit 5

现在,您可以在第二行用pick替换squash,并将提交2和3合并(转换为一个新的,不同的提交)。 (请注意,提交4和5也将被复制到新的不同提交中,具有相同的更改但父ID不同。)

如果你想将提交2压缩到提交1中,你必须退一步。

基本上,您必须从感兴趣点之前的点开始。如果兴趣点在开始时是正确的,那么这是一个问题 - 因此交互式rebase允许您指定--root