求助 V 友们,我刚刚学了 Git 不久,可能遇到了非常蠢的问题,大佬轻点喷:
由于不太了解原理,第一次
git commit
提交了一个大文件然后推送到了远程。然后在网上查资料,想在彻底删除这个大文件的基础上保留后面的所有 commit 。但是关于如下两个问题没有找到理想的解决方法。
查阅资料发现,想要删除中间的一个 commit,需要使用 git rebase -i <欲删除的 commit 对应的前一串 hash>
,然后从 pick 改成 drop 之类的 balabala 。那么问题来了,我想删掉最早一个 commit,那么这个 commit 的前面已经没有提交记录了......所以该怎么做呢?
接上个问题,因为没有找到合适的方法,干脆降低期望值,直接新建一个分支,扔掉了之前所有的 commit 和旧分支。然后问题来了,大文件占用的空间依然没有减少。于是查资料,按照网上各种千篇一律转载的方法,比如这个https://www.jianshu.com/p/c699e83026c4,然后卡在了 git verify-pack -v .git/objects/pack/pack-<hash>.idx | sort -k 3 -n | tail -10
这步,提示我找不到文件。我已经填写了文件资源管理器中找到的占用空间最大的那个 .idx 文件对应的 dat 文件的 hash 了。那么我该如何做呢?
1
hantsy 2020-06-18 21:07:58 +08:00 2
git rebase -i --root
|
2
monsterxx03 2020-06-18 21:28:02 +08:00 via Android 1
还可以用 git filter-repo 插件清理大文件
|
3
AlisaDestiny 2020-06-18 23:23:27 +08:00
如果你 commit history 不重要,你可以直接删掉 repo,然后删除本地项目下的.git 目录。重新建立一个同名项目,git init ,git remote add origin.再 push 上去。
|
4
Vegetable 2020-06-18 23:26:32 +08:00
git gc --aggressivey 应能删掉不被引用的文件
|
5
Ariver 2020-06-19 06:27:23 +08:00 via iPhone
最简单的重新初始化一个 repo
|
6
msg7086 2020-06-19 06:34:35 +08:00 via Android
腾空间需要做一个很复杂的 gc,需要把没用的对象都强制过期才能 gc 掉。可以搜一下命令,我自己也记不住,得每次搜。
|
7
baiyi 2020-06-19 08:43:11 +08:00 1
如果你已经重写了,并且保证没有分支或其他引用能指向,那就可以 gc,试试 git gc --prune=now
|
8
vevlins 2020-06-19 09:38:45 +08:00
没解决过这种问题,提两个思路,不一定可行:
1.试试 git revert 抵消掉第一次 commit,推到远程后删掉本地仓库,再用 git clone --depth 1 从远程仓库只拉取最近一次 commit 2. git cherry-pick 把后面的 commit 都搬走,然后删掉原来的分支 |