在推动之后压扁提交

时间:2017-02-10 15:37:58

标签: git git-reset git-squash

想象一下带有以下提交的git存储库:

Fixed issue 3               123eabc
Fixed issue 2 (part 2)      fa23b79
Fixed issue 2 (part 1)      7bea5cc
Fixed issue 1               0d229f4

这些都已经推送到远程主人。现在有办法重写历史并将中间两个合并为一个提交吗?像

这样的东西
Fixed issue 3               123eabc
Fixed issue 2               9d23e0c
Fixed issue 1               0d229f4

1 个答案:

答案 0 :(得分:4)

一种选择是进行交互式rebase,在其中将两个问题2提交压缩在一起。

git rebase -i HEAD~4

这告诉Git你想做一个涉及四个提交的交互式rebase,包括从你的分支的HEAD向后计数。这应该显示一个类似于以下内容的列表:

pick 0d229f4 Fixed issue 1
pick 7bea5cc Fixed issue 2 (part 1)
pick fa23b79 Fixed issue 2 (part 2)
pick 123eabc Fixed issue 3

请注意最旧的提交首先出现 ,并且最近的四次提交显示 last

将要与第1部分合并的中间提交部分2的pick更改为squash

pick 0d229f4 Fixed issue 1
pick 7bea5cc Fixed issue 2 (part 1)
squash fa23b79 Fixed issue 2 (part 2)
pick 123eabc Fixed issue 3

Squashing意味着将标有squash的提交合并到上面的提交中,在这种情况下将第2部分合并到第1部分。

然后保存此文件并退出编辑器,并完成rebase。

注意:重写公共分支的历史记录可能会给使用此分支的人以外的任何人带来问题。因此,如果这种情况适用于您,您可能希望避免使用此答案。