git 找回 git reset --hard HEAD 後的代碼

下面方法只針對當你本地代碼作了 git add 或則 git commit 後又手賤的重置本地代碼到上一個版本,致使本地代碼丟失的狀況。git

若是你沒有 git add 命令,而直接 git reset --hard 了,抱歉,代碼估計找不回來了。code


一,第一種狀況 git commit 後重置代碼

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


二,第二種狀況 git add 後重置代碼

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

相關文章
相關標籤/搜索