Git误删除找回

一、查看提交历史

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ git log

--------------------- 输出 ----------------------------
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700

changed the version number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700

removed unnecessary test code

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700

first commit

使用git log查看提交历史,通过备注(写好提交备注是一个良好的习惯)确认需要哪一次的提交,复制好commit的ID。

更多命令请看官方文档

二、回退到指定的版本

1
$ git reset --hard ~id

把~id换成上面复制的commit的ID,即可替换。该命令比较暴力,会把本地项目直接回退到指定的版本,因此最好先备份好本地文件

三、维护及数据恢复

1
$ git reflog

当你 (在一个仓库下) 工作时,Git 会在你每次修改了 HEAD 时悄悄地将改动记录下来。当你提交或修改分支时,reflog 就会更新。即就是说每次本地commit都会被记录。

利用该命令,可查找到所有的本地提交记录,然后再利用git reset --hard命令来回滚版本。比如在a项目本地提交,没有提交到远程仓库时,但是项目又因为其他原因导致部分文件不对、版本不匹配,就可利用该操作处理。

如果只是git add .,还没有本地提交的文件

1
$ git fsck --lost-found

这个命令会把最近add的,但是未提交的文件,显示在.git/lost-found/other这个文件夹下,所有文件都是用id命名的,需要用nodepad等文件打开,看看文件内部类容,然后根据文件内容再手动恢复文件。

更多请看Git 内部原理 - 维护及数据恢复

四、恢复本地误删的文件

1
2
3
4
5
$ git status    // 查看文件的变动,找出被误删的文件

$ git reset HEAD [ 被删除的文件或文件夹 ]

$ git checkout [ 被删除的文件或文件夹 ]
坚持原创技术分享,您的支持将鼓励我继续创作!