Git 数据恢复
摘要:本文涵盖了多种情况的数据后的恢复,包含:误删分支,重置,push -f 导致的数据丢失.其它情况的数据丢失,可根据本文原理进行恢复.
1. 删除分支数据丢失的恢复
1.1 误删分支
首先,在某分支下,执行了以下操作,导致恶删除了a-branch分支:
git branch -D a-branch
1.2 根据操作记录找出关键信息
查看操作记录:
git reflog
可以看到类似下面的输出信息:
b6720ef (HEAD -> master) HEAD@{0}: checkout: moving from a-branch to master
0f49852 HEAD@{1}: commit: a-branch:important data
b6720ef (HEAD -> master) HEAD@{2}: checkout: moving from master to a-branch
...
查找删除a分支之前,在a分支上的最后一次有效提交,记录其校验码,此处为0f49852:
0f49852 HEAD@{1}: commit: a-branch:important data
1.3 恢复a-branch
基于此校验码新建分支:
# git branch <recover-branch> <check-code>
git branch a-branch 0f49852
新分支,就是删除分支a之前的最后一次有效提交状态,数据恢复完毕.
2. Reset回溯数据丢失的恢复
2.1 误回溯导致数据丢失
# git reset --hard <check-code>
git reset --hard e1b7a4c
2.2 根据操作记录找出关键信息
查看操作记录:
git reflog
可以看到类似下面的输出信息:
e1b7a4c (HEAD -> a-branch) HEAD@{0}: reset: moving to e1b7a4c # 执行回溯,导致数据丢失
024e772 HEAD@{1}: commit: a-branch:some-data # 增加重要数据的提交操作;
e1b7a4c (HEAD -> a-branch) HEAD@{2}: commit: a-branch:new-base
...
找到重要数据添加的一次提交,对应的校验码024e772;
2.3 恢复数据
git reset --hard 024e772
3. push -f 导致远程数据丢失的恢复
在此用gitlab举例,恢复被丢失的提交.
通过网页登陆远程的gitlab,进入仓库中丢失数据的分支;
进入 Project overview | Activity 的分页面,可以考到所有的用户的所有操作纪录;
找出丢失的那一次提交,点击hash值的超链接,进入那次提交的详细界面.选择 Options | Cherry-Pick,进入到申请合并本次提交的界面,选择合并到的目标分支,填写申请信息,点击提交;
在 Merge Requests 页面,可以看到合并申请,点击同意,即可完成丢失数据的恢复.