誤用git reset -hard 的檢討書
消失的代碼們:
我知道你們可能看不到了,但是我還是需要自我反省自己,因為自己的誤操作,導致了你們的消失。
事情的始末
夜闌人靜,周圍除了少年敲擊鍵盤的聲音,就再也聽不到其他聲響,他伸了伸懶腰,滿意的看着眼前的Android Studio中自己奮斗了1個小時的成果,熟練的按下了git commit,正要起身離開。
AS報了錯誤:
Pull is not possible because you have unmerged files
少年輕蔑的笑了,隨即打開Chrome輸入了那段報錯提示,困意襲來,出現的第一個搜索結果讓他毫不猶豫的點了進去,少年快速的滑動文章,直接找到了解決代碼部分:
復制,轉到AndroidStudio >Terminal > 輸入 >回車 ,一氣呵成。
然而他再也笑不出來,眼前的項目已變回上一次自己 **git pull ** 的樣子,之間自己沒有過 commit 除了 Android Studio 自動的 add ,自己辛苦一小時的成果連個影子都已看不到。腦袋"轟"的一下,困意全無。
慌亂的打開瀏覽器,查找着解決辦法,不放過任何一個可能的機會,但是他又錯了,又是看到任何一個救命稻草就拼命抓住,多經過多次嘗試,最終,少年找到了解決辦法。
少年這會仔細的閱讀了文章,加上前面幾次的嘗試未果的經驗,很快就理解並再次敲起了鍵盤:
git fsck --lost-found
他知道,這個命令並不會讓他的項目馬上發生變化,幾乎是同一時間,Terminal輸出了這樣一段代碼:
Terminal告訴少年,丟失的文件已經幫他找回來,放在了lost-found文件夾下
確認過眼神,這確實是丟失的文件,只是文件名已看不出樣子,內容是源碼,遺憾的是,大概之前嘗試的命令混亂,lost-found下的文件內容不是最新的,大概是創建文件后短暫的時間,並且不是新建的文件的修改內容已經找不到,還是得自己重新寫。
反思
- 查找問題時不應該不看文章內容
- 使用一個命令應該先了解其作用
- 遇到問題不能亂,需冷靜思考
總結
git reset -hard的恢復辦法總的來說分為3個情況:
已commit | 未commit但有add | 未commit未add |
---|---|---|
git reflog 獲取hash值 git reset --hard [對應的值] |
git fsck --lost-found 恢復刪除文件 到.git/lost-found目錄尋找文件 |
神仙難救 |