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