7

想象一个具有以下提交的 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
4

1 回答 1

12

一种选择是进行交互式变基,将两个问题 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

注意最旧的提交首先出现,四个提交中最近的提交最后出现。

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

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

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

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

于 2017-02-10T15:45:57.793 回答