Git 数据恢复

文章目录

在你使用 Git 的时候,你可能会意外丢失一次提交。 通常这是因为你强制删除了正在工作的分支,但是最后却发现你还需要这个分支;亦或者硬重置了一个分支,放弃了你想要的提交。 如果这些事情已经发生,该如何找回你的提交呢?

1、实例

假设你已经提交了五次

$ git log --pretty=oneline 
ab1afef80fac8e34258ff41fc1b867c702daa24b   modified repo a bit 
484a59275031909e19aadb7c92262719cfcdf19a   added repo.rb 
1a410efbd13591db07496601ebc7a059dd55cfe9   third commit 
cac0cab538b970a37ea1e769cbbde608743bc96d  second commit 
fdf4fc3344e67ab068f836878b6c4951e3b15f3d   first commit

现在,我们将 master 分支硬重置到第三次提交

$ git reset --hard 1a410efbd13591db07496601ebc7a059dd55cfe9 
HEAD is now at 1a410ef third commit 
$ git log --pretty=oneline 
1a410efbd13591db07496601ebc7a059dd55cfe9 third commit 
cac0cab538b970a37ea1e769cbbde608743bc96d second commit 
fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit 

现在顶部的两个提交已经丢失了,没有分支指向这些提交。 你需要找出最后 一次提交的 SHA-1 然后增加一个指向它的分支。 窍门就是找到最后一次的 提交的 SHA-1 - 但是估计你记不起来了,对吗?

最方便,也是最常用的方法,是使用一个名叫 git reflog 的工具。 当你正在工作时,Git 会默默地记录每一次你改变 HEAD 时它的值。 每一 次你提交或改变分支,引用日志都会被更新

$ git reflog 
1a410ef HEAD@{0}: reset: moving to 1a410ef 
ab1afef HEAD@{1}: commit: modified repo.rb a bit 
484a592 HEAD@{2}: commit: added repo.rb   
。。。

git reflog 并不能显示足够多的信息。 为了使显示的信息更加有用, 我们可以执行 git log -g,这个命令会以标准日志的格式输出引用日志

2、恢复

看起来下面的那个就是你丢失的提交,你可以通过创建一个新的分支指向这个提交来恢复它。 例如,你可以创建一个名 为 recover-branch 的分支指向这个提交(ab1afef)
git branch recover-branch ab1afef
现在有一个名为 recover-branch 的分支是你的 master 分支曾经指向的地方,再一次使得前两次提交可到达了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玳宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值