(相关命令: git resetgit loggit reflog, 要看文档的话用 --help)
这是一次愚蠢的行为之后的总结避免我之后忘记了解决方法逃
get reset --hard 是一个非常危险的行为
比如该项目, git log 显示:
- $ git log
- commit cc53a1925fb7895ad88d155a43f3012249615919 (HEAD -> master)
- Author: ***
- Date: Mon Mar 12 16:47:00 2018 +0800
- version 1
- commit 1ca078c22c4b7d5c79214069cb1be8d4122dbe7e
- Author: ***
- Date: Mon Mar 12 16:46:46 2018 +0800
- version 0
此时执行 git reset --hard HEAD^(回退为 HEAD 前一次提交):
- $ git reset --hard HEAD^
- HEAD is now at 1ca078c version 0
此时再次查看 git log, 发现 version 1 提交没有了 git log 只查看当前提交的祖先
- $ git log
- commit 1ca078c22c4b7d5c79214069cb1be8d4122dbe7e (HEAD -> master)
- Author: ***
- Date: Mon Mar 12 16:46:46 2018 +0800
- version 0
此时可以 git reflog, 即查看每一次 HEAD 的变化, 并 reset 到需要的 commit
- $ git reflog
- 1ca078c (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
- cc53a19 HEAD@{1}: commit: version 1
- 1ca078c (HEAD -> master) HEAD@{2}: commit (initial): version 0
- $ git reset cc53a19 --hard
- HEAD is now at cc53a19 version 1
或者用 git log -g(即 --walk-reflogs) 查看每一次 HEAD 的变化的日志, 并进行 reset(代码略
来源: http://www.bubuko.com/infodetail-2525214.html