在使用git reset转到较旧的变更集之后,如何回到历史记录中的最后一次提交?

e-s*_*tis 15 git git-reset

假设我的历史就是这样:

A - B - C - D(主)

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

A - B(主人)

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

我怎么能回到D?

Von*_*onC 24

你应该能够看到D with 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果我们想看看那个州是什么,我们可以git checkout -b temp HEAD@{2}(或者git checkout HEAD@{2}如果你有git 1.5.0及以上).

  • 这简直救了我的命。 (3认同)