如何将git commit history压缩到5次提交之前

时间:2014-07-22 22:51:12

标签: git github git-rebase git-reset squash

我的repo有大量的提交,我想将所有内容压缩到最后五次提交 - 所以最后repo会有一个提交,然后是我最近的五次提交。

在:

10
9
8
7
6
5
4
3
2
1

后:

10
9
8
7
6
squash commit

我尝试了git reset --soft在结束和开始被压扁的部分,但我不知道如何保留我的最后五个提交,当我在五个之前压缩部分时它会消失。

1 个答案:

答案 0 :(得分:1)

使用git rebase -i --root。 (如果你的git不够新,不能在其交互式rebase中使用--root,那么你必须先创建一个" orphan"分支会更加痛苦。)你将会这样做。在一个文件的编辑器会话上显示如下:

pick b9491ea commit-10
pick d1574b8 commit-9
...
pick ab31c0f commit-1

# Rebase ...
# [commentary with instructions]

将提交2到5更改为"压缩",保存,退出编辑器,并且rebase将提交2到5压缩到提交#1的副本,然后添加提交6到10的副本。由此产生的repo将包含最终提交的副本(并且没有任何原始提交 - 好吧,它们仍然在那里,现在只是隐形,最终将被垃圾收集)。

(你也有机会解决压扁提交的提交文本。)