本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点
如果我已经执行了
git reset --hard XXX
,之前的
commit
的内容还能找回来吗?
首先,经过之前的学习,我们起码知道,执行完
reset
回滚commit以后,之前的commit其实没有被删除,肯定还在的。
要找回之前的
commit
的内容,那我们势必得知道对应的commit 的SHA-1值吧,这个时候用
git log
是看不到的。
之前我们曾经提到过,就是
.git
目录下有一个
logs
目录,里面记录了所有HEAD改变的记录,包括分支操作(新建、切换等),commit操作(新commit,reset等)。那我们之前
reset
也是更改了HEAD,所以这里面肯定会有我们的记录。可以用下面的方法拿到:
git log -g
git reflog
复制代码
拿到之前的
commit
信息之后,我们就能找回对应的提交记录了
git branch branchName commitId
复制代码
找回删除的文件
上面
撤销add
一节中我们用的命令并不会删除工作目录中的文件,但是万一你一不小心漏掉了
--cached
参数,那效果就不一样了,会把工作目录和暂存区中的文件记录都会删除。
可以从垃圾桶里面还原出来吗?
rm
这个命令是linux命令,文件一旦通过
rm
命令删除,则无法恢复。比如:
rm new.txt
复制代码
要想知道删除的文件能不能找回来,我们先得明白我们的文件信息存在于哪些地方。主要是3个:
暂存区也可能有,如果之前 add 过,并且没有做过删除暂存区的操作的话
commit信息中,这里如果之前提交过则肯定是有的,而且一般是删除不掉的
如果我们前面是通过上面的
rm
命令删除了工作目录的文件,那我们可以从暂存区里面把文件恢复出来:
git checkout -- new.txt
复制代码
如果我们是一开头的那种情况,用
git rm
命令,就会把暂存区和工作区都删除了,那还可以从最近的
commit
中恢复(当然前提是你之前已经提交过了):
git checkout HEAD readme.txt
复制代码
所以综上,还是推荐大家尽量不要用带有
rm
的命令,撤销
add
操作用
reset
命令。
reset
命令操作的都是跟
commit
相关的,比如把分支重置到某次
commit
,把某些文件重置到某次
commit
对应的文件版本等。
同时,如果不知道怎么操作,可以用
git status
命令,它会提示一些操作:
git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: myTest.txt
欢迎关注我的公众号查看更多精彩文章!