推送后压缩提交

Squashing commits after they are pushed

想象一个 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

一个选项是进行交互式变基,在其中将两个问题 2 提交压缩在一起。

git rebase -i HEAD~4

这告诉 Git 你想做一个涉及四个提交的交互式变基,包括并从你的分支的 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

请注意,最旧 提交出现在第一,四个提交中最近的提交出现在最后[=35] =].

将要与第 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

压缩意味着将标有 squash 的提交合并到 上面 的提交中,在本例中是将第 2 部分合并到第 1 部分。

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

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