Git 版本回退


原文鏈接:https://mp.weixin.qq.com/s/Rb6fNqvVdfHWRxc7zddPaQ

Git 中的撤銷操作,可以分為四類:

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

1 基於命令行

1.1 工作區的代碼想撤銷

可以通過git checkout -- <file>命令來撤銷工作區的代碼修改。

image

首先執行了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命令實現,如下:

image

核心過程就是先執行git reset HEAD命令,從暫存區撤銷,然后參照 1.1 小節命令。

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

可以利用git reset --hard <版本號>命令來實現版本回退,該命令中的版本號有幾種不同的寫法:

  • 可以使用HEAD^來描述版本,一個^表示前一個版本,兩個^^表示前兩個版本,以此類推;
  • 也可以使用數字來代替^,比如說前 100 個版本可以寫作HEAD~100
  • 也可以直接寫版本號,表示跳轉到某一個版本處。每次提交后,都會生成一個哈希碼作為版本號,所以這里可以直接填版本號,哈希碼很長,但是不用全部輸入,只需要輸入前面幾個字符即可。

通過以下幾個步驟為例:

  1. 通過git log查看當前提交日志;

image

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

image

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

image

  1. 通過git reset --hard HEAD^回退到上一個版本;

image

1.4 遠程倉庫代碼撤銷

先在本地倉庫撤銷,然后 push 到遠程倉庫即可。

2 基於 IDEA

2.1 未提交就撤銷

對於 第一小節基於命令行 的前兩種撤銷操作,即修改的文件還沒 commit,此時想要撤銷,非常簡單,點擊 IDEA 工具欄的撤銷按鈕即可。

image

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

image

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

2.2 commit 了想撤銷

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

image

也可以點擊 IDEA 工具欄的時鍾圖標,快速打開提交日志:

image

提交日志類似下面這樣:

image

此時的回退分情況,有兩種:

  • Undo Commit
  • Revert Commit

下面分別介紹兩種情況。

2.2.1 Undo Commit

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

image

如果在其它的 commit 上單擊,如下:

image

既然如此,就來看看如何在最近一次提交上實現 Undo Commit。
在最近一次提交 commit 日志上右鍵單擊選擇 Undo Commit,如下:

image

選中后,直接點擊 OK,撤銷最近一次的 Commit。撤銷之后,本地的修改相當於變成了已 add 但是未 commit 的狀態,此時可以繼續開發新代碼,然后再 commit,再 push。

2.2.2 Revert Commit

這個操作到處都能用,不同於 Undo Commit,Revert Commit 之后,會產生一條提交記錄。相當於 Revert Commit 其實也是一次提交,只不過提交的內容剛好相反,剛好刷掉已有內容。
Revert Commit 操作可以用在所有的提交日志上,而不僅僅是最近一次的提交。

具體操作步驟如下:

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

image

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

image

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

image

2.3 push 了想撤銷

先在本地倉庫撤銷,撤銷完成后,重新修改代碼,最后再 push 即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM