Git強大的撤銷、版本回退功能,讓咱們在開發的過程當中可以隨意的回到任何一個時間點的狀態,本文咱們就來看看Git中的各類後悔藥! git
本文是Git系列的第三篇,瞭解前面的文章有助於更好的理解本文:編輯器
本文將從以下三個方面介紹Git中的後悔藥:日誌
1.工做區的代碼想撤銷
2.add到暫存區的代碼想撤銷
3.提交到本地倉庫的代碼想撤銷code
提交到遠程倉庫的後悔藥咱們統一都在關聯遠程倉庫一文中講解,敬請期待。blog
可能有一天我正在寫代碼,寫了好久發現寫錯了,想恢復到一開始的狀態,一個笨辦法就是把剛剛寫的代碼一行一行的刪除,不過這種方式成本過高,咱們能夠經過git checkout -- <file>
命令來撤銷工做區的代碼修改。以下圖: 圖片
首先咱們執行了git status命令,發現工做區是乾淨的,而後執行了cat命令,發現文件只有兩行內容,而後經過vi編輯器向文件中添加一行,保存並退出,退出來以後又執行了git status命令,此時工做區的狀態已經發生變化,而後咱們執行了git checkout -- git01.txt命令,表示撤銷以前的操做,讓git01.txt恢復到以前的狀態,該命令執行成功以後,咱們再執行cat命令發現文件內容已經恢復了,此時再執行git status,狀態也恢復了。開發
若是想要撤銷,可是代碼已經提交到暫存區了,不用擔憂,也能撤銷,分兩個步驟: get
1.將暫存區的代碼撤銷到工做區
2.將工做區的代碼撤銷(具體操做和'工做區的代碼想撤銷'一致) it
將暫存區的代碼撤銷,咱們可使用git reset HEAD
命令來實現。以下圖:
這裏的代碼都比較簡單,核心的過程就是先執行git reset HEAD
命令,從暫存區撤銷,剩下的操做參考'工做區的代碼想撤銷'一節。
一樣的,提交到本地倉庫的代碼同樣也能夠撤銷,咱們能夠利用git reset --hard <版本號>
命令來實現版本回退,該命令中的版本號有幾種不一樣的寫法:
1.可使用HEAD^來描述版本,一個^表示前一個版本,兩個^^表示前兩個版本,以此類推。
2.也可使用數字來代替^,好比說前100個版本能夠寫做HEAD~100。
3.也能夠直接寫版本號,表示跳轉到某一個版本處。咱們每次提交成功後,都會生成一個哈希碼做爲版本號,因此這裏咱們也能夠直接填版本號,哈希碼很長,可是咱們不用所有輸入,只須要輸入前面幾個字符便可,就能識別出來。
看下面一系列的操做:
1.經過git log查看當前提交日誌:
2.經過git reset HEAD^^向前回退兩個版本:
3.查看日誌,發現最後一次提交的版本號是695ce1fe,利用git reset --hard 695ce1fe命令回到回退以前的狀態:
4.經過git reset --hard HEAD~1回到上一個版本:
好了,Git中的後悔藥咱們就先介紹到這裏,有問題歡迎留言討論。
參考資料:
1.《GitHub入門與實踐》
2.《Pro Git》
更多JavaEE和Git資料請關注公衆號: