我认为,您可以按照以下答案缩小历史记录:
如何删除 github gist 的特定修订?
决定要保留哪些历史点。
pick <hash1> <commit message>
pick <hash2> <commit message>
pick <hash3> <commit message> <- keep
pick <hash4> <commit message>
pick <hash5> <commit message>
pick <hash6> <commit message> <- keep
pick <hash7> <commit message>
pick <hash8> <commit message>
pick <hash9> <commit message>
pick <hash10> <commit message> <- keep
然后,将每个“保留”之后的第一个保留为“选择”,并将其他标记为“壁球”。
pick <hash1> <commit message>
squash <hash2> <commit message>
squash <hash3> <commit message> <- keep
pick <hash4> <commit message>
squash <hash5> <commit message>
squash <hash6> <commit message> <- keep
pick <hash7> <commit message>
squash <hash8> <commit message>
squash <hash9> <commit message>
squash <hash10> <commit message> <- keep
然后,通过保存并退出编辑器来运行 rebase。在每个“keep”点,消息编辑器将弹出一个组合提交消息,范围从先前的“pick”到“keep”提交。然后,您可以只保留最后一条消息,或者实际上将它们组合起来以记录原始历史记录,而不保留所有中间状态。
在那次变基之后,中间文件数据仍将在存储库中,但现在未引用。git gc
现在确实会让你摆脱这些数据。