如果在本地做了一些修改,并且没有push到远程代码库,然后你做了git reset操作把修改删除了,这时候使用git
pull拿不回来,使用git log也查看不到修改记录,看起来没有后悔药吃了,别慌,还有git
reflog,他可以查看你做的任何操作记录,比如checkout、reset、pull等。
- 首先新增一个文件或者做一些修改,并且提交到本地库
$ git add .
$ git commit -m "add a.java"
现在看git的历史记录,你可以看到这次提交记录:
$ git log --oneline
1cb10d0 (HEAD -> master) add a.java
4429f26 init
- 现在使用reset将代码回滚到init这一个版本:
$ git reset --hard 4429f26
HEAD is now at 4429f26 init
$ git log --oneline
4429f26 (HEAD -> master) init
$ git reflog
4429f26 (HEAD -> master) HEAD@{0}: reset: moving to 4429f26
1cb10d0 HEAD@{1}: commit: add a.java
4429f26 (HEAD -> master) HEAD@{2}: commit (initial): init
使用git log我们找不到add a.java这次提交记录,但是使用git reflog我们可以看到我们刚才做的commit和reset操作。
所以,我们要找回add a.java这次记录,只需要做如下操作:
$ git reset --hard 1cb10d0
也可以将恢复的结果放到另一分支
$ git checkout -b ajava 1cb10d0
Switched to a new branch 'ajava'
- 再来看一下 git 记录:
$ git log --oneline
1cb10d0 (HEAD -> ajava) add a.java
4429f26 (master) init
当未push的本地代码被git reset删除时,git pull无法恢复。但通过git reflog,可以查看所有操作历史,包括commit和reset。通过找到丢失的提交ID,使用git reset --hard或git checkout,能找回丢失的代码,或将恢复的内容放到新的分支。
1324

被折叠的 条评论
为什么被折叠?



