如何在使用 git reset 回到早期变更集后返回到最新的提交记录?

23
假设我的历史记录如下:
A - B - C - D(主分支)
如果我执行git reset B命令,我会得到以下结果:
A - B(主分支)
问题在于,git log现在只显示从A到B的历史记录,我无法再看到C和D了。
那么我该如何回到D呢?
2个回答

33

你可以使用git reflog命令来查看D。

你可以阅读这篇文章了解更多信息。

只有在运行 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
这些行可以分成四个部分:
- 提交哈希值, - 提交指针, - 操作, - 和额外的信息。
如果我们想恢复失去的提交,例如在 `HEAD@{1}` 处,我们可以使用命令 `git reset --hard HEAD@{2}`。现在我们的当前分支(以及工作副本)已经回到了重置之前的状态。
如果我们只想查看该状态,我们可以使用命令 `git checkout -b temp HEAD@{2}`(或者如果你使用的是 Git 1.5.0 或更高版本,则使用 `git checkout HEAD@{2}`)。

1

好的,找到了。

你可以使用 git reflog 命令。

我以前不知道它是干嘛用的,但现在我能看出来,这是记录所有 HEAD 指向的参考的日志。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接