Git找回回滚后的内容和删除的文件

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一块儿天天进步一点点linux

若是我已经执行了git reset --hard XXX,以前的commit的内容还能找回来吗?

首先,通过以前的学习,咱们起码知道,执行完 reset回滚commit之后,以前的commit其实没有被删除,确定还在的。git

要找回以前的 commit 的内容,那咱们势必得知道对应的commit 的SHA-1值吧,这个时候用git log是看不到的。bash

以前咱们曾经提到过,就是 .git目录下有一个 logs 目录,里面记录了全部HEAD改变的记录,包括分支操做(新建、切换等),commit操做(新commit,reset等)。那咱们以前 reset 也是更改了HEAD,因此这里面确定会有咱们的记录。能够用下面的方法拿到:微信

//是的,你没看错,加个 -g 参数就看获得了
git log -g
//或者是下面的命令
git reflog
复制代码

拿到以前的 commit信息以后,咱们就能找回对应的提交记录了学习

//能够新建一个分支指向对应的提交
git branch branchName commitId
复制代码

找回删除的文件

上面 撤销add 一节中咱们用的命令并不会删除工做目录中的文件,可是万一你一不当心漏掉了 --cached 参数,那效果就不同了,会把工做目录和暂存区中的文件记录都会删除。ui

能够从垃圾桶里面还原出来吗?spa

rm 这个命令是linux命令,文件一旦经过 rm 命令删除,则没法恢复。好比:code

//这样执行删除,new.txt不会出如今垃圾桶
rm new.txt
复制代码

要想知道删除的文件能不能找回来,咱们先得明白咱们的文件信息存在于哪些地方。主要是3个:cdn

  • 工做目录
  • 暂存区也可能有,若是以前 add 过,而且没有作过删除暂存区的操做的话
  • commit信息中,这里若是以前提交过则确定是有的,并且通常是删除不掉的

若是咱们前面是经过上面的 rm 命令删除了工做目录的文件,那咱们能够从暂存区里面把文件恢复出来:string

git checkout -- new.txt
复制代码

若是咱们是一开头的那种状况,用 git rm 命令,就会把暂存区和工做区都删除了,那还能够从最近的 commit 中恢复(固然前提是你以前已经提交过了):

git checkout HEAD readme.txt
复制代码

因此综上,仍是推荐你们尽可能不要用带有 rm 的命令,撤销 add 操做用 reset 命令。

reset 命令操做的都是跟 commit 相关的,好比把分支重置到某次 commit,把某些文件重置到某次 commit对应的文件版本等。

同时,若是不知道怎么操做,能够用 git status 命令,它会提示一些操做:

//在 add 以后执行
git status
//输出
On branch master
Changes to be committed:
	//这句就是提示咱们,若是后悔add了,能够用下面的 reset命令
  (use "git reset HEAD <file>..." to unstage)

	modified:   myTest.txt

复制代码

欢迎关注个人公众号查看更多精彩文章!
复制代码

AntDream
相关文章
相关标签/搜索