3

我们已经配置了一个 git 仓库,这个仓库包含更多的分支。最近我们遇到了一个问题,我们丢失了一些从存储库中的用户克隆推送的提交。

如果我运行“git log commitid”,我可以看到提交 id 信息,但 git branch --contains commitid” 不显示它所属的分支。

此外,如果我在下面运行描述它的结果,我运行 fsck 所有选项,但看起来这些提交不是纠缠提交。请分享您的想法,为什么这个提交丢失并且没有附加到任何分支。

git describe commitid --all 
changes/01/21112/1

我运行了 git reflog ,但它没有显示提交 id ,我们实际上从一个提交中挑选了提交,现在我可以看到实际的 commitid (即使这个提交也不属于任何提交)和挑选的提交 id缺少对应于实际提交 id 的,我无法追踪到精心挑选的提交 id

如何找到丢失的精选提交 id ?

4

1 回答 1

5

你试过了git reflog吗?

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

您可以查看是否是这种情况:

$ git fsck --no-reflogs

reflog 在这里保护您。它允许您回滚灾难性resetrebase, 或任何其他更改历史的命令。

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

如果你想永久删除它们,你可以使用类似的东西:

$ git reflog expire --all

但要小心!这可能无法撤消。

于 2012-08-31T07:09:11.590 回答