重置所有提交记录
1.在需要替换的分支(master)下,创建orphan分支,命名为 new
git checkout --orphan new 注:
如果不提交东西,这个分支实际上没有创建
2.提交
$ git add .
$ git commit -m "init"
3.删除原来需要替换的分支(master)
$ git branch -d master 4. 将新分支改名为原需替换的分支名(master)
$ git branch -m new master 5. 将新分支强制覆盖远程的同名分支(master)
$ git push --set-upstream origin master -f
到此已替换结束;多个分支,就重复以上 5 步。
其他协作者需要做的是
1. 切换到刚才替换的分支,执行拉取代码
$ git checkout master
$ git pull注:
pull 过程相当于新拉取一个新项目,有点耗时。
2.至当前分支执行 (重置提交信息,与远程分支一致)
$ git reset --hard origin/master 注:这一步将不会再跟踪本地 .git 目录中的原日志信息 ,并跟远程保持同步跟踪记录(没有这一步的的话,本地 push 时,将把历史跟踪记录再次提交!危险!)。
注:这个操作历史跟踪日志并没有被删除,只是不再与现分支产生联系(.git文件夹并不会减小),要彻底删除他们请看下面内容。
清理 Git 缓存
如果执行了上面的方法,发现仓库的提交还是没有减小,那么你可能需要执行下面的方法。【以上方法完成之后.git 文件夹中将依然会保留之前提交信息(已无法跟踪,现把它们删除掉)。】
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git fsck --full --unreachable
git repack -A -d
git gc --aggressive --prune=now
git push --force origin master
注:
0.以上命令在任何一分支下执行,所有分支下.git 文件夹 都见效 (因为本来就一份 .git ! )
1.最后一条有歧义,可不用执行;
2.本地仓库大小立竿见影(小了好多);
3.最有一条,强制推送到远程,远程仓库依然没法减少,甚至是在原来基础上+ 本地减小后的 .git 文件夹大小(或许远程仓库的意义就在此吧,记录所有变化,绝不接受清除!!个人看法,或许不对!勿喷!);
4.在此基础上,重新克隆下来的代码,.git文件夹大小未做测试,或许也变为最小了吧。
5.原协作者本地.git库 大小不会变,需要自行执行清理缓存一系列命令。
