1. 程式人生 > >恢復 git reset --hard tag_name/commit/HEAD的誤操作

恢復 git reset --hard tag_name/commit/HEAD的誤操作

最近一直在不斷地使用git工具下code以及build code,在這過程中要不斷的切branch和track遠端branch以及切對應的tag,而在這這過程中我們會用到:git reset --hard tag_name來對版本進行切換,如果我們對reset前的那一版未儲存或者push,我們誤操作了該命令,在很多資料裡說的都是–hard很危險有的說是不可逆操作,但是昨天我遇到這樣的問題在導師的指導下才知道該命令是可逆的,下面我們來看看具體的:

舉個例子說明操作過程:

//git需要提前安裝,安裝方法百度或者學些ProGit文件第一章,講的很詳細
$ git init  //在當前目錄下建立本地git庫
$ touch test.txt//建立測試檔案 $ git add test.txt $ git commit -m "initial commit" //也可以使用`git commit .`來代替add和commit -m這兩步 $ echo 'touch test.txt' >> test.txt $ git commit -a -m " add to test"//一次性提交到本地git庫中

使用git log命令產看一下提交歷史:

//git log -param,很多引數如-s -p等可以使用
$ git log
* 74abca4 (HEAD, master)  add to
test * 8f0b801 initial commit

這裡我們可以來一次git reset --hard tag_name/commit_id看一下:

$ git reset --hard 8f0b801
$ git log
* 8f0b801(HEAD, master) initial commit

我們退回到前一個版本了,之前的操作被抹去了,沒法再直接切回去了,但是不要怕,git還有一個命令就是防止這種現象的,那就是git refloggit reflog就是用來記錄你之前所有提交的歷史,他的記錄很簡單那就是commit_id以及提交資訊記錄,但是有了這兩個就夠了,我們可以找回我們丟失的東西了,下面我們卡看具體操作:

$ git reflog
712c2ab HEAD@{0}: reset: moving to 8f0b801
74abca4 HEAD@{1}: commit: add to test
8f0b801 HEAD@{2}: commit (initial): initial commit

有了之前所有操作的commit以及提交資訊我們就能找到我們要找的版本了,確認了我們要找的就是74abca4這一版,那麼我們接下來就可以切換了,下面我們看一下命令:

$ git reset --hard 74abca4//在`git reset --hard`切回去

再來看一下 git 記錄:

$ git log
*74abca4 (HEAD, master) add to test
*8f0b801 initial commit

這樣我們的reset前的版本就算是找回了,git reset後想找回得在git沒有清理前找回,這個清理時間大概是一個月以後了,所以想找回必須在這之前。