Git的fsck
文档谈到了“悬空”对象,而gc
文档仅谈论“松散”对象。存在严格的区分。
但是在阅读一些相关的SO帖子时,这些术语似乎可以互换使用。在Git Book v2和Git的源代码中也是如此:
(main) $ git checkout v2.33.0
(225bc32) $ rg 'dangling (object|commit|blob|tag|tree)' | wc -l
31
(225bc32) $ rg 'loose (object|commit|blob|tag|tree)' | wc -l
117
最后,这两个命令通常按顺序使用,从它们的行为来看,它们似乎针对相同的内容。
因此,“dangling”和“loose”只是同一概念的2个类似术语。这个总结正确吗?
"松散的对象"是否是一个类别,而"dangling"则有意保留给特定类型的对象?"
git reset B~3
来删除所有三个新的提交:B 现在指向 H,而不是 K。虽然所有三个提交都成为了未引用/不可到达的状态,但只有一个是“悬空”的,因为如果将“悬空”的端点变得可到达,则有两个提交可以到达它。(这只是真正缩短 git fsck 输出的方式而已。) - torek