假设我的历史是这样的:
A-B-C-D(主)
If I do git reset B
,我会得到:
A - B(主)
麻烦的是,git log
现在只向我显示从A到B的历史,而我再也看不到C和D了。
我怎样才能回到D?
您应该能够看到 Dgit reflog http://www.kernel.org/pub/software/scm/git/docs/git-reflog.html.
看到这个例如文章 http://gitfu.wordpress.com/2008/04/06/git-reflog-no-commits-left-behind/.
唯一一次真正删除提交的是 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 部分:
- 提交哈希值,
- 提交指针,
- action,
- 和额外信息。
如果我们想找回丢失的提交HEAD@{1}
,我们可以git reset --hard HEAD@{2}
.
现在,我们当前的分支(和工作副本)在重置之前已设置为存储库状态。
如果我们只想看看那个状态是什么,我们可以git checkout -b temp HEAD@{2}
(or git checkout HEAD@{2}
如果您有 git 1.5.0 及更高版本)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)