我的 repo 有大量的提交,我想压缩所有内容,直到最后五个提交 - 所以最后 repo 将有一个 squash 提交,然后是我最近的五个提交。
前:
10
9
8
7
6
5
4
3
2
1
后:
10
9
8
7
6
squash commit
我在压缩部分的末尾和开头尝试了 git reset --soft ,但我不确定如何保留最后五个提交,当我在五个之前压缩部分时,这些提交就消失了。
我的 repo 有大量的提交,我想压缩所有内容,直到最后五个提交 - 所以最后 repo 将有一个 squash 提交,然后是我最近的五个提交。
前:
10
9
8
7
6
5
4
3
2
1
后:
10
9
8
7
6
squash commit
我在压缩部分的末尾和开头尝试了 git reset --soft ,但我不确定如何保留最后五个提交,当我在五个之前压缩部分时,这些提交就消失了。
使用git rebase -i --root
. (如果你的 git 不够新,不能--root
在它的交互式 rebase 中使用,那会有点痛苦,因为你必须首先创建一个“孤儿”分支。)你将看到一个文件的编辑器会话,如下所示:
pick b9491ea commit-10
pick d1574b8 commit-9
...
pick ab31c0f commit-1
# Rebase ...
# [commentary with instructions]
将提交 2 到 5 更改为“squash”,保存,退出编辑器,rebase 会将提交 2 到 5 压缩到提交 #1 的副本中,然后添加提交 6 到 10 的副本。生成的 repo 将包含最终提交(并且没有任何原始提交——嗯,它们仍然在那里,只是现在不可见,最终将被垃圾收集)。
(您也将有机会修复 squashed-commit 的提交文本。)