IDEA 中如何完成 Git 版本回退?

@[toc] 上週的文章發了後,有小夥伴問如何在 IDEA 中進行 Git 的版本回退?

其實這個松哥之前寫過文章,但是時間久遠了,所以今天再和小夥伴們重新捋一捋這個話題,順便也來聊聊如何在 IDEA 中進行 Git 的版本回退。

Git 中的撤銷操作,我們可以歸納爲四類:

  1. 工作區的代碼想撤銷
  2. add到暫存區的代碼想撤銷
  3. 提交到本地倉庫的代碼想撤銷
  4. 遠程倉庫的代碼想要撤銷

1. 基於命令行

1.1 工作區的代碼想撤銷

可能有一天我正在寫代碼,寫了很久發現寫錯了,想恢復到一開始的狀態,一個笨辦法就是把剛剛寫的代碼一行一行的刪除,不過這種方式成本太高,我們可以通過git checkout -- <file> 命令來撤銷工作區的代碼修改。如下圖:

p182

首先我們執行了 git status 命令,發現工作區是乾淨的,然後執行了 cat 命令,發現文件只有兩行內容,然後通過 vi 編輯器向文件中添加一行,保存並退出,退出來之後又執行了 git status 命令,此時工作區的狀態已經發生變化,然後我們執行了 git checkout -- git01.txt 命令,表示撤銷之前的操作,讓 git01.txt 恢復到之前的狀態,該命令執行成功之後,我們再執行 cat 命令發現文件內容已經恢復了,此時再執行 git status,狀態也恢復了。

1.2 add 到暫存區的代碼想撤銷

如果想要撤銷,但是代碼已經提交到暫存區了,不用擔心,也能撤銷,分兩個步驟:

  1. 將暫存區的代碼撤銷到工作區
  2. 將工作區的代碼撤銷(具體操作和 1.1 小節一致)

將暫存區的代碼撤銷,我們可以使用 git reset HEAD 命令來實現。如下圖:

p183

這裏的代碼都比較簡單,核心的過程就是先執行 git reset HEAD 命令,從暫存區撤銷,剩下的操作參考 1.1 小節。

1.3 提交到本地倉庫的代碼想撤銷

同樣的,提交到本地倉庫的代碼一樣也可以撤銷,我們可以利用 git reset --hard <版本號> 命令來實現版本回退,該命令中的版本號有幾種不同的寫法:

  1. 可以使用 HEAD^ 來描述版本,一個 ^ 表示前一個版本,兩個 ^^ 表示前兩個版本,以此類推。
  2. 也可以使用數字來代替 ^,比如說前 100 個版本可以寫作 HEAD~100
  3. 也可以直接寫版本號,表示跳轉到某一個版本處。我們每次提交成功後,都會生成一個哈希碼作爲版本號,所以這裏我們也可以直接填版本號,哈希碼很長,但是我們不用全部輸入,只需要輸入前面幾個字符即可,就能識別出來。

看下面一系列的操作:

  1. 通過 git log 查看當前提交日誌:

p184

  1. 通過 git reset HEAD^^ 向前回退兩個版本:

p185

  1. 查看日誌,發現最後一次提交的版本號是 695ce1fe,利用 git reset --hard 695ce1fe 命令回到回退之前的狀態:

p186

  1. 通過 git reset --hard HEAD~1 回到上一個版本:

p187

當然以上操作都是基於命令行的,如果你命令行操作比較熟練的話,其實命令行操作比 IDEA 上點點點要快很多。

1.4 遠程倉庫撤銷

如果代碼提交到遠程倉庫了,想要撤銷,那就如 1.3 小節所講,先在本地倉庫撤銷,然後 push 到遠程倉庫即可。

2. 基於 IDEA

看懂了命令行操作,再看基於 IDEA 的操作就容易多了。

2.1 未提交就撤銷

對於第一小節的前兩種撤銷操作,即修改的文件還沒 commit,此時想要撤銷,方式很簡單,點擊 IDEA 右上角的撤銷按鈕:

如果你修改了文件,無論有沒有執行 git add 命令,只要沒有 commit,都可以通過這個按鈕撤銷修改,點擊該按鈕,彈出如下提示框:

這裏會列出來所有修改但是沒有 commit 的文件,想要撤銷哪個文件的修改,就勾選該文件,然後點擊 Rollback 按鈕就完成了撤銷操作。

2.2 commit 了想撤銷

如果已經 commit 了,那麼就需要先打開提交日誌,點擊如下按鈕打開:

也可以直接點擊 IDEA 右上角的時鐘圖標,快速打開提交日誌:

提交日誌類似下面這樣:

此時的回退就分情況了。

首先這個撤銷操作分兩種:

  • Revert Commit
  • Undo Commit

我們分別來看。

2.2.1 Undo Commit

Undo Commit 這個操作只能在最近一次提交上使用,不能在其他提交上使用,最近一次 commit 上,右鍵單擊,如下圖:

其他的 commit 上右鍵單擊:

既然如此,我們就來看看最近的一次 commit 如何 Undo Commit。

在最近一次 commit 日誌上右鍵單擊後選擇 Undo Commit,如下圖:

選中後,直接點擊 OK,撤銷最近一次的 commit。

這就是撤銷最近一次 commit,撤銷之後,本地的修改相當於變成了已 add 但是未 commit 的狀態,此時我們可以繼續開發新代碼,然後再 commit,再 push;或者也可以像 2.1 小節介紹的那樣,繼續撤銷操作。

我電腦上的 IDEA 在這塊操作中有個偶發性問題,就是撤銷掉 commit 之後,IDEA 檢測不到文件處於未提交狀態,需要我把 IDEA 關掉重新打開,IDEA 就能發現文件處於未提交狀態了,此時就可以按照 2.1 小節的步驟繼續回退了,這塊小夥伴們在試驗的時候可以留意下。

2.2.2 Revert Commit

Revert Commit 這個操作到處都能用,不同於 Undo Commit,Revert Commit 之後,會產生一條提交記錄。相當於 Revert Commit 其實也是提交,只不過提交的內容剛好相反,剛好刷掉已有內容。

Revert Commit 操作可以用在所有的日誌上,而不僅僅是剛剛提交的 commit。

操作方式如下:

找到需要回滾的地方,右鍵單擊,選擇 Revert Commit:

此時會彈出來一個提交的對話框,就是一個普普通通的 commit 對話框,如下:

commit 之後,可以看到內容已經撤銷了,提交日誌中也多了一條記錄,如下圖:

2.3 push 了想撤銷

如果已經 push 到遠程倉庫了,怎麼撤銷?

其實跟 2.2 小節一樣,先在本地倉庫撤銷,撤銷完成後,重新修改代碼,最後再 force push 就行了,不過 force push 的時候,注意別把同事的代碼給覆蓋了。

3. 小結

好啦,今天和小夥伴們分享了 Git 中的幾個撤銷問題,有問題的小夥伴歡迎留言討論呀~</版本號></file>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章