在作设计时,不时要回到之前commit的某个阶段。有分候或者是要恢复某个文件,有时可能会有一些误操作。
所以,生活有时需要reset。
当然,我们要养成好习惯,在commit前diff一下。
先说恢复某个文件:
1.首先查看某个文件某次的修改,这样就可以了
git show 某次的提交哈希值 文件名
例如
git show 12e49a7720fe92d5c19a8015fbc40a410e52370d test.java
2.取消已经暂存的文件
全加到了暂存区域。该如何撤消暂存其中的一个文件呢?
git reset HEAD test.java
3.用reset命令回到想回到的状态
git reset 52b7b10 test.java
git checkout -- test.java 【现在只需要把test.java恢复到修改之前,也就是之前提交的状态就可以了】
4.适当配合git log查看文件,达到最佳效果
恢复到某个阶段的工作区
们可以通过reflog来进行恢复,前提是丢失的分支或commit信息没有被git gc清除。一般情况下,gc对那些无用的object会保留很长时间后才清除的。
reflog是git提供的一个内部工具,用于记录对git仓库进行的各种操作,可以使用git reflog或git log -g命令来看到所有的操作日志。
恢复的过程很简单:
1. 通过git log -g命令来找到我们需要恢复的信息对应的commitid,可以通过提交的时间和日期来辨别。
2. 通过git branch recover_branch commitid 来建立一个新的分支。
这样,我们就把丢失的东西给恢复到了recover_branch分支上了。
数据恢复
在使用 Git 的过程中,有时会不小心丢失 commit 信息。这一般出现在以下情况下:强制删除了一个分支而后又想重新使用这个分支,hard-reset 了一个分支从而丢弃了分支的部分 commit。如果这真的发生了,有什么办法把丢失的 commit 找回来呢?
其实你只要记得那个要恢复的SHA就可以恢复到那里了,但是,你不大可能记住了这个 SHA,是吧?
通常最快捷的办法是使用 git reflog 工具。当你 (在一个仓库下) 工作时,Git 会在你每次修改了 HEAD 时悄悄地将改动记录下来。当你提交或修改分支时,reflog 就会更新。git
update-ref 命令也可以更新 reflog。
1.先用reflog看看记录的所有HEAD的历史
git reflog
2.然后找到那个SHA,进行恢复
git reset --hard 98abc5a
3.再来看一下 git 记录:
git log
所以,如果你因为reset等操作丢失一个提交的时候,你总是可以把它找回来。除非你的操作已经被git当做垃圾处理掉了,一般是30天以后。