推送后压缩提交

Mer*_*rik 5 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
Run Code Online (Sandbox Code Playgroud)

这些都已推送到远程主服务器。现在有没有办法重写历史并将中间的两个合并为一个提交?就像是

Fixed issue 3               123eabc
Fixed issue 2               9d23e0c
Fixed issue 1               0d229f4
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 10

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

git rebase -i HEAD~4
Run Code Online (Sandbox Code Playgroud)

这告诉 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
Run Code Online (Sandbox Code Playgroud)

请注意,最早的提交出现在最前面,四个提交中最新的提交出现在最后

pick要与第 1 部分结合的中间提交第 2 部分更改为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
Run Code Online (Sandbox Code Playgroud)

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

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

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