天天看點

Git如何撤銷送出(指令行+IDEA)

文章目錄

  • ​​概覽、Git代碼管理的幾個狀态及倒回​​
  • ​​一、基于指令行​​
  • ​​1. 工作區的代碼想撤銷​​
  • ​​2. add到暫存區的代碼想撤銷​​
  • ​​3. 送出到本地倉庫的代碼想撤銷​​
  • ​​4. 遠端倉庫的代碼想要撤銷​​
  • ​​二、基于 IDEA​​
  • ​​1. 未送出就撤銷​​
  • ​​2. commit 了想撤銷​​
  • ​​Undo Commit​​
  • ​​Revert Commit​​
  • ​​3. push 了想撤銷​​

概覽、Git代碼管理的幾個狀态及倒回

Git如何撤銷送出(指令行+IDEA)

一、基于指令行

1. 工作區的代碼想撤銷

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

Git如何撤銷送出(指令行+IDEA)

首先我們執行了 git status 指令,發現工作區是幹淨的,然後執行了 cat 指令,發現檔案隻有兩行内容,然後通過 vi 編輯器向檔案中添加一行,儲存并退出,退出來之後又執行了 git status 指令,此時工作區的狀态已經發生變化,然後我們執行了 git checkout – git01.txt 指令,表示撤銷之前的操作,讓 git01.txt 恢複到之前的狀态,該指令執行成功之後,我們再執行 cat 指令發現檔案内容已經恢複了,此時再執行 git status,狀态也恢複了。

總結

git status
回顯 modified:  yourfile

git checkout -- yourfile

git      

2. add到暫存區的代碼想撤銷

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

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

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

Git如何撤銷送出(指令行+IDEA)

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

總結

git add afile
git status
git reset HEAD
git status
git checkout -- afile
git      

3. 送出到本地倉庫的代碼想撤銷

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

可以使用 HEAD^ 來描述版本,一個 ^ 表示前一個版本,兩個 ^^ 表示前兩個版本,以此類推。

也可以使用數字來代替 ^,比如說前 100 個版本可以寫作 HEAD~100。

也可以直接寫版本号,表示跳轉到某一個版本處。我們每次送出成功後,都會生成一個哈希碼作為版本号,是以這裡我們也可以直接填版本号,哈希碼很長,但是我們不用全部輸入,隻需要輸入前面幾個字元即可,就能識别出來。

看下面一系列的操作:

  1. 通過 git log 檢視目前送出日志:
  2. Git如何撤銷送出(指令行+IDEA)
git log --pretty=short      
  1. 通過 git reset HEAD^^ 向前回退兩個版本:
  2. Git如何撤銷送出(指令行+IDEA)
git      
  1. 檢視日志,發現最後一次送出的版本号是 695ce1fe,利用 git reset --hard 695ce1fe 指令回退:
  2. Git如何撤銷送出(指令行+IDEA)
git      
  1. 通過 git reset --hard HEAD~1 回到上一個版本:
  2. Git如何撤銷送出(指令行+IDEA)
git      

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

4. 遠端倉庫的代碼想要撤銷

如果代碼送出到遠端倉庫了,想要撤銷,那就如 3 小節所講,先在本地倉庫撤銷,然後 push 到遠端倉庫即可。

二、基于 IDEA

1. 未送出就撤銷

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

Git如何撤銷送出(指令行+IDEA)

如果你修改了檔案,無論有沒有執行 git add 指令,隻要沒有 commit,都可以通過這個按鈕撤銷修改,點選該按鈕,彈出如下提示框:

Git如何撤銷送出(指令行+IDEA)

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

2. commit 了想撤銷

如果已經 commit 了,那麼就需要先打開送出日志,點選如下按鈕打開:

Git如何撤銷送出(指令行+IDEA)

也可以直接點選 IDEA 右上角的時鐘圖示,快速打開送出日志:

Git如何撤銷送出(指令行+IDEA)

送出日志類似下面這樣:

Git如何撤銷送出(指令行+IDEA)

此時的回退就分情況了。

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

  • Revert Commit
  • Undo Commit

我們分别來看。

Undo Commit

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

Git如何撤銷送出(指令行+IDEA)

其他的 commit 上右鍵單擊:

Git如何撤銷送出(指令行+IDEA)

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

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

Git如何撤銷送出(指令行+IDEA)

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

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

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

Revert Commit

Revert Commit 這個操作到處都能用,不同于 Undo Commit,Revert Commit 之後,會産生一條送出記錄。相當于 Revert Commit 其實也是送出,隻不過送出的内容剛好相反,剛好刷掉已有内容。

Revert Commit 操作可以用在所有的日志上,而不僅僅是剛剛送出的 commit。

操作方式如下:

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

Git如何撤銷送出(指令行+IDEA)

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

Git如何撤銷送出(指令行+IDEA)

commit 之後,可以看到内容已經撤銷了,送出日志中也多了一條記錄,如下圖:

Git如何撤銷送出(指令行+IDEA)

3. push 了想撤銷