推送后压缩提交历史记录

8
假设有一个包含以下提交记录的 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

3
可以这样做,但问题是你应该这样做吗?任何已经从主分支上拉取代码的人都需要被通知重新拉取重写后的历史记录。 - chepner
1个回答

18

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

请注意,最早的提交会首先出现,而这四个提交中最新的提交会最后出现。

将要与第一部分合并的第二部分中间提交的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的提交合并到其上方的提交中,在本例中将第二部分合并到第一部分中。

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

注意:重写公共分支的历史记录可能会对使用此分支的任何人造成问题。因此,如果适用于您,请避免使用此答案。


非常好的答案。我有一个跟进问题,链接是 http://stackoverflow.com/questions/42820476/what-happens-to-the-squashed-changes-in-git - Merik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接