git 找回 git reset --hard HEAD 后的代码

Posted zhiyuan-2011

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git 找回 git reset --hard HEAD 后的代码相关的知识,希望对你有一定的参考价值。

下面方法只针对当你本地代码做了 git add 或则 git commit 后又手贱的重置本地代码到上一个版本,导致本地代码丢失的情况。

如果你没有 git add 命令,而直接 git reset --hard 了,抱歉,代码估计找不回来了。


一,第一种情况 git commit 后重置代码

1,在所在代码文件路径下执行 git reflog 这样就能看到所有的 commit 后的记录。

e294e2a [email protected]{5}: commit: 处理冲突
2d6c4d7 [email protected]{6}: commit (merge): 修改冲突
98e1316 [email protected]{7}: commit: 作业,听力训练和单词训练
aecbb45 [email protected]{8}: pull: Fast-forward

2,如果你很幸运的找到了上次提交的记录,执行 git reset --hard 后面加上 commitID (e294e2a)就可以找回丢失的代码。


二,第二种情况 git add 后重置代码

1,首先 执行 find .git/objects -type f | xargs ls -lt | sed 38q命令, 这样是找到你最近38次git add的记录。38是可以修改的,根据你自己需求修改。

jennydeMacBook-Pro:lestudy jenny$ find .git/objects -type f | xargs ls -lt | sed 38q
    -r--r--r--  1 jenny  staff     1717  7  8 10:14 .git/objects/c3/7f638a7ec2475aaf87345075c7a4dad7529bcb
    -r--r--r--  1 jenny  staff     1553  7  8 10:14 .git/objects/c2/0726da956cb092d980300915f714d686caaeb1
    -r--r--r--  1 jenny  staff     1732  7  8 10:14 .git/objects/5a/c8f3317822a12e8c9596b2896d3968e08003c6
    -r--r--r--  1 jenny  staff     1880  7  8 10:14 

2,使用git cat-file -p xxxx > 1.md 命令保存add记录对应的代码,其中xxxx是前面通过 find ....命令找到的add文件路径。

需要从 .git/objects/ 开始截取后面的所有路径,并且在截取后的路径,去掉其中的 / 斜杠来组成新的路径。

比如,.git/objects/c3/7f638a7ec2475aaf87345075c7a4dad7529bcb 截取后的就是 c3/7f638a7ec2475aaf87345075c7a4dad7529bcb,然后去掉斜杠就是c37f638a7ec2475aaf87345075c7a4dad7529bcb

最后执行 git cat-file -p c37f638a7ec2475aaf87345075c7a4dad7529bcb > 1.md命令,那么git就会把此条记录所对应的代码保存到 1.md 中。后续你根据代码修改文件名称即可。本次你的代码就找回了。

总结,没事不要 git reset --hard

以上是关于git 找回 git reset --hard HEAD 后的代码的主要内容,如果未能解决你的问题,请参考以下文章

git reset --soft,--hard的区别

git reset --hard和git revert命令

git reset --hard xxx、git reset --soft 及git revert的区别

git reset 命令详解

超级有用的git reset --hard和git revert命令

sh git hard reset staging