我想从我的git repo中删除一个文件夹的提交记录,所以我使用了以下命令:
git filter-branch --tree-filter 'rm -rf folder' HEAD
git push origin master --force
但是我的git仓库没有任何变化,包含我想要删除的文件夹的提交仍然在git仓库中。
所以我再次尝试,但是出现了以下提示:
.git-rewrite已经存在,请删除它
我不知道还能做什么来永久地从包含该文件夹的所有提交中将其删除。
我想从我的git repo中删除一个文件夹的提交记录,所以我使用了以下命令:
git filter-branch --tree-filter 'rm -rf folder' HEAD
git push origin master --force
但是我的git仓库没有任何变化,包含我想要删除的文件夹的提交仍然在git仓库中。
所以我再次尝试,但是出现了以下提示:
.git-rewrite已经存在,请删除它
我不知道还能做什么来永久地从包含该文件夹的所有提交中将其删除。
只需按照消息所说的做即可。删除.git-rewrite已经存在,请删除它
.git-rewrite
。
提示:您不必使用--tree-filter
,索引过滤器会更快。然后,您必须使用git rm -rf --cached
。
我刚刚做了
rm -rf .git-rewrite
它成功了!!
当您通过filter-branch
删除文件夹后,如下:
git filter-branch -f --tree-filter 'rm -rf folder' HEAD
git push origin master --force
)时,需要取消引用对象并进行垃圾回收。git for-each-ref --format='delete %(refname)' refs/original
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now
git push origin --force --all
git push origin --force --tags
如果您想要完全删除特定的文件或文件夹,您可以使用BFG Repo-Cleaner。例如:
$ bfg --delete-folders folder --no-blob-protection my-repo.git
如需更多详细信息,请点击上述链接或访问高级Git / 删除敏感数据 GitHub 页面。