gpt4 book ai didi

git - 删除由 git 创建的大型 .pack 文件

转载 作者:IT王子 更新时间:2023-10-29 00:31:59 50 4
gpt4 key购买 nike

我将大量文件 checkin 分支并 merge ,然后不得不删除它们,现在我留下了一个大的 .pack 文件,我不知道如何删除。

我使用 git rm -rf xxxxxx 删除了所有文件,我还运行了 --cached 选项。

谁能告诉我如何删除当前位于以下目录中的大型 .pack 文件:

.git/objects/pack/pack-xxxxxxxxxxxxxxxxx.pack

我是否只需要删除我仍然拥有但不再使用的分支?或者我还需要运行其他东西吗?

我不确定它有多大不同,但它显示了文件的挂锁。

谢谢


编辑

以下是我的 bash_history 的一些摘录,它们应该让您了解我是如何设法进入这种状态的(假设此时我正在一个名为“my-branch”的 git 分支上工作,并且我有一个文件夹包含更多文件夹/文件):

git add .
git commit -m "Adding my branch changes to master"
git checkout master
git merge my-branch
git rm -rf unwanted_folder/
rm -rf unwanted_folder/ (not sure why I ran this as well but I did)

我以为我也运行了以下命令,但它没有与其他命令一起出现在 bash_history 中:

git rm -rf --cached unwanted_folder/

我还以为我运行了一些 git 命令(如 git gc)来尝试整理包文件,但它们也没有出现在 .bash_history 文件中。

最佳答案

问题是,即使您删除了这些文件,它们仍然存在于以前的修订版中。这就是 git 的全部意义所在,即使你删除了一些东西,你仍然可以通过访问历史记录来找回它。

你要做的是重写历史,它涉及到 git filter-branch 命令。

GitHub 在他们的网站上对这个问题有很好的解释。 https://help.github.com/articles/remove-sensitive-data

为了更直接地回答您的问题,您基本上需要运行的是相应替换了 unwanted_filename_or_folder 的命令:

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch unwanted_filename_or_folder' --prune-empty

这将从存储库的事件历史记录中删除对文件的所有引用。

下一步,执行 GC 循环以强制对文件的所有引用过期并从包文件中清除。这些命令中无需替换任何内容。

git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
# or, for older git versions (e.g. 1.8.3.1) which don't support --stdin
# git update-ref $(git for-each-ref --format='delete %(refname)' refs/original)
git reflog expire --expire=now --all
git gc --aggressive --prune=now

关于git - 删除由 git 创建的大型 .pack 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11050265/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com