我可以删除已添加但尚未提交到 git 的文件吗?

我可以删除已添加但尚未提交到 git 的文件吗?

Git 似乎保留了已添加但未提交的 blob

#> mkdir foo
#> cd foo
#> echo a > data.txt
#> git add data.txt
#> find .git/objects
.git/objects/58/7be6b4c3f93f93c489c0111bba5596147a26cb

好的,现在更改内容。

#> echo b > data.txt
#> git add data.txt
#> find .git/objects
.git/objects/61/780798228d17af2d34fce4cfbdf35556832472
.git/objects/58/7be6b4c3f93f93c489c0111bba5596147a26cb

我们不再需要了58/7be6b4c3f93f93c489c0111bba5596147a26cb,对吗?

#> git commit -m 'first'
#> find ./git/objects
.git/objects/c0/eef182819e5c530c407ca17a24e39cb6682ed3
.git/objects/61/780798228d17af2d34fce4cfbdf35556832472
.git/objects/58/7be6b4c3f93f93c489c0111bba5596147a26cb
.git/objects/70/a6a81a455bea58166d60d21060b074d3271b6a

那位孤儿58/7be6b4c3f93f93c489c0111bba5596147a26cb仍在那儿。

git add我对很多文件进行了操作,但这些文件在提交之前发生了更改。我可以删除索引不再引用的 blob 吗?

答案1

我看不出您为什么不能这样做,而且 git 似乎也同意这一点:运行git fsck --unreachable显示它为悬垂节点,
git prune --dry-run表明它将被删除。

不过,我不会手动运行它(在正常的 repo/工作场景中) -git gc命令正好有这个目的:(来自https://git-scm.com/docs/git-gc

在当前存储库中运行许多管理任务,比如压缩文件修订(以减少磁盘空间并提高性能)以及删除可能由之前调用 git add 创建的无法访问的对象。

鼓励用户在每个存储库内定期运行此任务,以保持良好的磁盘空间利用率和良好的运行性能。

相关内容