Git commit id丢失了

时间:2012-08-31 06:06:24

标签: git

我们已经配置了一个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?

1 个答案:

答案 0 :(得分:5)

你试过git reflog吗?

如果提交未引用(例如,使用git reset),它实际上会在存储库中保留一段时间,甚至git gc也不会收集它。那是因为它们在 reflog 中被引用。

你可以看看是否是这种情况:

$ git fsck --no-reflogs

reflog就是为了保护你。它允许您回滚灾难性的resetrebase或任何其他更改历史记录的命令。

如果你想恢复这些丢失的提交,你可以很容易地从reflog中获取它们。

如果您想永久删除它们,可以使用以下内容:

$ git reflog expire --all

但要注意!这可能不会被撤消。