这是我的实验.
git init
echo hello > some.txt
git add some.txt
-- objects
-- f2 (blob "hello")
echo hola > some.txt
git add some.txt
-- objects
-- f2 (blob "hello")
-- 53 (blob "hola")
git commit -m "..."
-- objects
-- f2 (blob "hello")
-- 53 (blob "hola")
-- 5c (tree
"some.txt" -> 53)
-- 61 (commit "tree 5c")
Run Code Online (Sandbox Code Playgroud)
我们可以看到每个"git add"都创建了blob对象,而"git commit"提交了最后一个blob 53.
但请注意,中间blob"f2"仍在存储库中.这有什么理由吗?我怎么能用这个blob?或者我该如何删除它?
我花了一分钟才明白你在问什么:)
Git至少可以保存所有内容一段时间.如果你跑
git fsck
Run Code Online (Sandbox Code Playgroud)
你应该看到
dangling blob f2...
Run Code Online (Sandbox Code Playgroud)
这是一个让未引用的东西停留一段时间的git设计.这个想法是,如果你"哎呀"某事,那么文件仍然存在.它也是一种"懒惰优化",其中添加一些东西可以保存状态以便作为内容寻址文件提交,并且提交某些内容只是建立对这些内容的引用.清理部分是分开的.您应该查看git prune和git gc的文档.
默认情况下,它会git gc在至少2周后的某些运行中清理干净.此外,在积极清理的情况下,git reflog(通常用于打捞提交和重新安装的东西)的实用程序将丢失.
| 归档时间: |
|
| 查看次数: |
1678 次 |
| 最近记录: |