最后给出的是从 SourceTree 分支树视图中提取的屏幕截图(屏幕截图中间有一个间隙)
其中,#1
指向曾经是分支的线路,1.7.6.14.X
并#2
指向同一分支的当前状态。
引用的提交#3
和该行上的前 8 个提交以前附加到 branch 1.7.6.14.X
。然后另一个开发人员应该检查了同一个分支并做了#4
. 此#4
提交已从分支中删除了前 9 个提交,1.7.6.14.X
并使它们悬空。
结果,分支1.7.6.14.X
现在从原始分支点开始,而不是仅仅从 commit 扩展#3
。
运行git fsck
, etc 不会给出任何错误--unreachable
。--dangling
我也试过--lost-found
了。
但是,git fsck <hash of commit #3>
会产生五个悬空提交和一大堆悬空标签:
Checking object directories: 100% (256/256), done.
Checking objects: 100% (3148/3148), done.
dangling commit ec213...
dangling commit ab82a...
dangling commit 7d262...
dangling commit a6f06...
dangling commit 6674a...
我有两个问题:
什么可能导致这种情况(即分支
#1
分离)?如何检测其他存储库中是否存在类似问题?(无需知道分离提交的哈希值,例如
#3
)
更新:
我们找到了问题(1)的答案。这种情况是由拥有旧分支快照的开发人员强制推送到中央裸仓库引起的。