git 如何将多个提交从一开始压缩成一个?

zlhcx6iw  于 2023-05-12  发布在  Git
关注(0)|答案(2)|浏览(181)

我有一个用于个人笔记的回购。我在多台机器和多个操作系统上使用相同的存储库。同步使用git进行。每台机器都有一个5分钟的cron作业,既可以从(同一个)存储库中推送,也可以从存储库中拉取,这使它在所有机器上保持一致。
随着时间的推移,我已经积累了数千次提交,我真的不需要一个多月前的提交(我有一年多的更新)。所以我需要把前1000个提交压缩成一个,而不需要通过重新创建整个仓库来改变我的整个设置!
我能做些什么来压缩前1000个提交,从而使repo的大小更小?

evrscar2

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

rryofs0p

rryofs0p2#

我提供了一个脚本来完成这一点,没有太多麻烦,包括合并:
https://github.com/eantoranz/git-replay
所以.... checkout 一个新的分支,从你想要的树作为fiesta提交的提交开始。假设这个提交是X

git checkout --orphan new-branch X
git add .
git commit -m "first commit"

现在,用剧本

./git-replay HEAD X original-branch

这将很快,在最后,一个提交的id,有一个历史,就像你想要的。检查它,如果你喜欢它,使用该提交设置你想要的分支。

相关问题