2012-08-31 70 views
3

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

如果我运行“git的日志的commitid”我能看到提交ID信息,但混帐分支--contains的commitid”不显示它所属的分公司。

另外,如果我跑形容它下面的结果,我的fsck所有选项跑,但看起来LIET这些提交不纠缠提交。请分享你的想法,为什么这样的提交人失踪,不与任何分支连接。

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

我跑git的引用日志,但它没有显示提交ID,我们实际上是挑选了c ommit从一个提交,现在我可以看到实际的提交id(即使这个提交也不属于任何提交)和樱桃挑选的提交id对应于实际提交ID缺失,我无法追踪樱桃选择的提交id

如何找到丢失的樱桃选择的提交ID?

+0

等等,我没有得到您的帖子的第二部分。一旦你选择了你要提交给分支的提交,当你在分支中运行'git log'时,你应该会看到一个新的提交标识,并且在注释中有目标标识。会发生什么?在这种情况下,你在找什么? – Vince

+0

如果这是一个樱桃选择,并且它不在应该接受提交的分支上,为什么不再选择樱桃呢? – Christopher

+0

嗨Vince,christoper,我正在寻找一个提交id是cherry-pick commit id,现在我无法在裸仓库中看到樱桃选择的提交ID。 “git log commitid”我提到了哪些是我本地克隆中的实际提交ID,但没有找到我在远程裸机中提交的樱桃提交的提交ID,我可以从我的本地提交中挑选出来,但是问题是,我们看到这些樱桃挑选的提交总是缺失,因此我们希望找到误导樱桃挑选的提交标识的原因。 – bsd

回答

5

你试过git reflog

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

你可以看到,如果这是这样:

$ git fsck --no-reflogs 

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

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

如果你想删除它们为好,你可以使用类似:

$ git reflog expire --all 

但要小心!这可能不会被撤消。

+0

我运行git reflog,但它没有显示提交id,实际上我们从一个提交中选择了提交,现在我可以看到实际的提交(即使这个提交也不属于任何分支)和樱桃提交提交id对应于实际提交ID缺失,我无法追踪樱桃选择的提交ID 我如何找到丢失的樱桃提取的提交ID? 在此先感谢 – bsd