下面方法只针对当你本地代码作了 git add 或则 git commit 后又手贱的重置本地代码到上一个版本,致使本地代码丢失的状况。git
若是你没有 git add 命令,而直接 git reset --hard 了,抱歉,代码估计找不回来了。code
1,在所在代码文件路径下执行 git reflog
这样就能看到全部的 commit 后的记录。it
e294e2a HEAD@{5}: commit: 处理冲突 2d6c4d7 HEAD@{6}: commit (merge): 修改冲突 98e1316 HEAD@{7}: commit: 做业,听力训练和单词训练 aecbb45 HEAD@{8}: pull: Fast-forward
2,若是你很幸运的找到了上次提交的记录,执行 git reset --hard
后面加上 commitID (e294e2a
)就能够找回丢失的代码。ast
1,首先 执行 find .git/objects -type f | xargs ls -lt | sed 38q
命令, 这样是找到你最近38次git add
的记录。38是能够修改的,根据你本身需求修改。sed
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文件路径。object
须要从 .git/objects/ 开始截取后面的全部路径,而且在截取后的路径,去掉其中的 / 斜杠来组成新的路径。file
好比,.git/objects/c3/7f638a7ec2475aaf87345075c7a4dad7529bcb
截取后的就是 c3/7f638a7ec2475aaf87345075c7a4dad7529bcb
,而后去掉斜杠就是c37f638a7ec2475aaf87345075c7a4dad7529bcb
方法
最后执行 git cat-file -p c37f638a7ec2475aaf87345075c7a4dad7529bcb > 1.md
命令,那么git就会把此条记录所对应的代码保存到 1.md 中。后续你根据代码修改文件名称便可。本次你的代码就找回了。d3
git reset --hard