我有一个用于个人笔记的回购。我在多台机器和多个操作系统上使用相同的存储库。同步使用git进行。每台机器都有一个5分钟的cron作业,既可以从(同一个)存储库中推送,也可以从存储库中拉取,这使它在所有机器上保持一致。随着时间的推移,我已经积累了数千次提交,我真的不需要一个多月前的提交(我有一年多的更新)。所以我需要把前1000个提交压缩成一个,而不需要通过重新创建整个仓库来改变我的整个设置!我能做些什么来压缩前1000个提交,从而使repo的大小更小?
evrscar21#
即:我当前历史记录:
(master): m1<--m2<--m3<--f1<--f2<--f3(HEAD) 6 5 4 3 2 1
你想压缩(最近4次提交)- 4 3 2 1,你可以这样做第一:
git rebase -i HEAD~4 (1, 2, 3 merge into 4)
第二:
popup appear (vim editor), you have to replace pick with s or squash in (3, 2, 1)
最后:
wq!
如果要将这些更改推送到远程,则必须指定-f
rryofs0p2#
我提供了一个脚本来完成这一点,没有太多麻烦,包括合并:https://github.com/eantoranz/git-replay所以.... checkout 一个新的分支,从你想要的树作为fiesta提交的提交开始。假设这个提交是X
X
git checkout --orphan new-branch X git add . git commit -m "first commit"
现在,用剧本
./git-replay HEAD X original-branch
这将很快,在最后,一个提交的id,有一个历史,就像你想要的。检查它,如果你喜欢它,使用该提交设置你想要的分支。
2条答案
按热度按时间evrscar21#
即:我当前历史记录:
你想压缩(最近4次提交)- 4 3 2 1,你可以这样做
第一:
第二:
最后:
如果要将这些更改推送到远程,则必须指定-f
rryofs0p2#
我提供了一个脚本来完成这一点,没有太多麻烦,包括合并:
https://github.com/eantoranz/git-replay
所以.... checkout 一个新的分支,从你想要的树作为fiesta提交的提交开始。假设这个提交是
X
现在,用剧本
这将很快,在最后,一个提交的id,有一个历史,就像你想要的。检查它,如果你喜欢它,使用该提交设置你想要的分支。