我们已经配置了一个git存储库,这个存储库包含更多分支。最近我们遇到了一个问题,我们丢失了一些从存储库中的用户克隆推送的提交。
如果我运行" git log commitid"我能够看到提交ID信息,但是git branch --contains commitid"没有显示它所属的分支。
此外,如果我在下面运行描述结果,我运行fsck所有选项,但看起来liet这些提交不是纠结提交。请分享您的想法,为什么这些提交遗失,并且没有任何分支。
git describe commitid --all
changes/01/21112/1
我运行了git reflog,但它没有显示提交ID,我们实际上从一次提交中挑选了提交,现在我可以看到实际的commitid(即使这个提交也不属于任何提交)和缺少与实际提交ID相对应的樱桃提取的提交ID,我无法找出樱桃选择的提交ID
如何找到丢失的樱桃选择的提交ID?
答案 0 :(得分:5)
你试过git reflog
吗?
如果提交未引用(例如,使用git reset
),它实际上会在存储库中保留一段时间,甚至git gc
也不会收集它。那是因为它们在 reflog 中被引用。
你可以看看是否是这种情况:
$ git fsck --no-reflogs
reflog就是为了保护你。它允许您回滚灾难性的reset
,rebase
或任何其他更改历史记录的命令。
如果你想恢复这些丢失的提交,你可以很容易地从reflog中获取它们。
如果您想永久删除它们,可以使用以下内容:
$ git reflog expire --all
但要注意!这可能不会被撤消。