git学习:关于恢复的那点事

在作设计时,不时要回到之前commit的某个阶段。有分候或者是要恢复某个文件,有时可能会有一些误操作。

所以,生活有时需要reset。

当然,我们要养成好习惯,在commit前diff一下。


先说恢复某个文件:


1.首先查看某个文件某次的修改,这样就可以了


git show 某次的提交哈希值 文件名

例如

git show 12e49a7720fe92d5c19a8015fbc40a410e52370d  test.java

2.取消已经暂存的文件

全加到了暂存区域。该如何撤消暂存其中的一个文件呢?

git reset HEAD test.java


现在 test.java 文件又回到了之前已修改未暂存的状态。

3.用reset命令回到想回到的状态

git reset 52b7b10 test.java
git checkout -- test.java 【现在只需要把test.java恢复到修改之前,也就是之前提交的状态就可以了】

4.适当配合git log查看文件,达到最佳效果


恢复到某个阶段的工作区


在使用Git的过程中,有时可能会有一些误操作,比如:执行checkout -f 或 reset -hard 或 branch -d删除一个分支,结果造成本地(远程)的分支或某些commit丢失。这时,我

们可以通过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天以后。


你可能感兴趣的:(git,版本控制)