有時候,我們用Git的時候有可能commit送出代碼後,發現這一次commit的内容是有錯誤的,那麼有兩種處理方法:
1、修改錯誤内容,再次commit一次
2、使用git reset 指令撤銷這一次錯誤的commit
第一種方法比較直接,但會多次一次commit記錄。
而我個人更傾向第二種方法,錯誤的commit沒必要保留下來。
那麼今天來說一下git reset。它的一句話概括
git-reset - Reset current HEAD to the specified state
意思就是可以讓HEAD這個指針指向其他的地方。例如我們有一次commit不是不是很滿意,需要回到上一次的Commit裡面。那麼這個時候就需要通過reset,把HEAD指針指向上一次的commit的點。
它有三種模式,soft,mixed,hard,具體的使用方法下面這張圖,展示的很全面了。

1. git reset --hard
reset --hard 會在重置 HEAD 和branch的同時,重置stage區和工作目錄裡的内容。當你在 reset 後面加了 --hard 參數時,你的stage區和工作目錄裡的内容會被完全重置為和HEAD的新位置相同的内容。換句話說,就是你的沒有commit的修改會被全部擦掉。
例如你在上次 commit 之後又對檔案做了一些改動:把修改後的ganmes.txt檔案add到stage區,修改後的shopping list.txt保留在工作目錄
2. git reset --soft & git reset
參考:Git reset的三種模式
3. 版本復原之再回來
加入我們已經從版本2復原到了版本1,那麼我們又想從版本1復原到版本2怎麼辦?
git reflog
介紹: 可以檢視所有分支的所有操作記錄(包括已經被删除的 commit 記錄和 reset 的操作)
執行
git reset --hard HEAD~1
,退回到上一個版本,用git reflog則可以看到被删除的commitid(用
git log
則是看不出來被删除的commitid),我們就可以買後悔藥,恢複到被删除的那個版本。
操作過程為:
1、
git reflog
檢視想要回退到那個版本的哈希碼
2、
git reset --hard HEAD^
回退
4. git reset HEAD filename
讓檔案從暫存區回到工作區,仍保持修改狀态