1. 程式人生 > 實用技巧 >github常用命令(四)刪除檔案後恢復兩種情況 rm /

github常用命令(四)刪除檔案後恢復兩種情況 rm /

rm刪除檔案命令 以bad.text為例
在這裡插入圖片描述
刪除後暫存區deleted no staged, git add 提交到暫存區後,執行git status deleted會變綠,執行commit後再git status ,working tree clean
在這裡插入圖片描述
delete之後 發現cat bad已經不存在
此時若想找回bad採用reset回退一步 回退到delete bad.txt之前 即HEAD在8253e9f,再ll檢視資源發現bad又存在了 又可以cat了
此時是指delete操作已經commit提交到本地庫
此時刪除的檔案可恢復原理就是任何操作只要commit提交到本地庫都會有一條記錄,這條記錄永遠不會被刪除,那麼恢復檔案bad 就是版本回退到刪除該檔案之前 這裡即是會退到HEAD 8253e9f

注意必須是要提交到本地庫後才會有記錄,即必須執行git commit後 若執行了某一操作沒有add 或者add了但是沒有commit 通過reflog去檢視日誌都沒有該操作的記錄
在這裡插入圖片描述
另一種情況是執行了delete操作且該操作add了但是沒有commit到本地庫此時採用git reset --hard HEAD可以看到雖然有delete操作 但是reflog依然沒有這條delete記錄 因此剛才版本回退的辦法已經不可用,採用git reset --hard HEAD
後再ll發現bad檔案恢復了
原理就是**–hard引數會修改暫存區和工作區為HEAD此時的指向,從下圖可以看到此時feflog裡面的 HEAD是執行delete之前的 也就是我們的

8253e9f**可以看到8253e9所指向的是正是刪除前的版本
該圖的第一條moving to 8253e9f是我們上一種情況delete之後恢復bad的那條記錄(為避免混淆 也可以新建一個檔案 然後delete但是不commt 看得更清楚)
在這裡插入圖片描述
總結
刪除檔案後想要找回該檔案前提是刪除之前檔案存在時的狀態提交到了本地庫

操作:git reset --hard index
刪除操作提交到了本地庫 index位置指向該記錄
刪除操作未提交到本地庫 index位置使用HEAD