20

假设我的历史是这样的:

A - B - C - D(主)

如果我这样做git reset B,我会得到:

A - B(主)

麻烦的是,git log现在只显示从 A 到 B 的历史,而我再也看不到 C 和 D。

我怎样才能回到 D ?

4

2 回答 2

31

您应该能够看到 D git reflog

例如,请参阅这篇文章

真正删除提交的唯一时间是如果你 git gc --prune (所以要小心那个!)。

如果您现在在您一直在使用的存储库中运行 git reflog,您会看到许多看起来像这样的更改:

c5c3a82... HEAD@{0}: pull origin featureB: Merge made by recursive.
49d0608... HEAD@{1}: reset --hard HEAD^: updating HEAD
3ed01b1... HEAD@{2}: pull origin featureA: Merge made by recursive.
49d0608... HEAD@{3}: pull origin bugfixJ: Merge made by recursive.
854d44e... HEAD@{4}: commit: Add more cowbell to foo.c
6dbc22d... HEAD@{5}: pull origin bugfixI: Merge made by recursive.
9bdb763... HEAD@{6}: commit: Remove weevils
8518f9d... HEAD@{7}: checkout: moving from wickedfeature to master

这些行可以分为 4 个部分:

  • 提交哈希,
  • 提交指针,
  • 行动,
  • 和额外的信息。

如果我们想找回丢失的提交HEAD@{1},我们可以git reset --hard HEAD@{2}.
现在我们当前的分支(和工作副本)在我们重置之前被设置为存储库状态。

如果我们只想看看那个状态是什么,我们可以git checkout -b temp HEAD@{2}(或者git checkout HEAD@{2}如果你有 git 1.5.0 及更高版本)。

于 2010-03-29T19:03:56.990 回答
1

好的,找到了。

您可以使用git reflog.

我不知道它是做什么用的,但现在我可以看到它是 HEAD 一直指向的所有引用的日志。

于 2010-03-29T19:02:36.217 回答