恢復 git reset --hard tag_name/commit/HEAD的誤操作
阿新 • • 發佈:2019-01-09
最近一直在不斷地使用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 reflog
。git 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沒有清理前找回,這個清理時間大概是一個月以後了,所以想找回必須在這之前。