文章目錄
- 概覽、Git代碼管理的幾個狀态及倒回
- 一、基于指令行
- 1. 工作區的代碼想撤銷
- 2. add到暫存區的代碼想撤銷
- 3. 送出到本地倉庫的代碼想撤銷
- 4. 遠端倉庫的代碼想要撤銷
- 二、基于 IDEA
- 1. 未送出就撤銷
- 2. commit 了想撤銷
- Undo Commit
- Revert Commit
- 3. push 了想撤銷
概覽、Git代碼管理的幾個狀态及倒回
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yM1gTO2E2YhdzMkFGZ0YzMzYzXzEDMwATMwMzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
一、基于指令行
1. 工作區的代碼想撤銷
可能有一天我正在寫代碼,寫了很久發現寫錯了,想恢複到一開始的狀态,一個笨辦法就是把剛剛寫的代碼一行一行的删除,不過這種方式成本太高,我們可以通過git checkout – <file> 指令來撤銷工作區的代碼修改。如下圖:
首先我們執行了 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小節一緻)
将暫存區的代碼撤銷,我們可以使用 git reset HEAD 指令來實作。如下圖:
這裡的代碼都比較簡單,核心的過程就是先執行 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。
也可以直接寫版本号,表示跳轉到某一個版本處。我們每次送出成功後,都會生成一個哈希碼作為版本号,是以這裡我們也可以直接填版本号,哈希碼很長,但是我們不用全部輸入,隻需要輸入前面幾個字元即可,就能識别出來。
看下面一系列的操作:
- 通過 git log 檢視目前送出日志:
git log --pretty=short
- 通過 git reset HEAD^^ 向前回退兩個版本:
git
- 檢視日志,發現最後一次送出的版本号是 695ce1fe,利用 git reset --hard 695ce1fe 指令回退:
git
- 通過 git reset --hard HEAD~1 回到上一個版本:
git
當然以上操作都是基于指令行的,如果你指令行操作比較熟練的話,其實指令行操作比 IDEA 上點點點要快很多。
4. 遠端倉庫的代碼想要撤銷
如果代碼送出到遠端倉庫了,想要撤銷,那就如 3 小節所講,先在本地倉庫撤銷,然後 push 到遠端倉庫即可。
二、基于 IDEA
1. 未送出就撤銷
對于第一小節的前兩種撤銷操作,即修改的檔案還沒 commit,此時想要撤銷,方式很簡單,點選 IDEA 右上角的撤銷按鈕:
如果你修改了檔案,無論有沒有執行 git add 指令,隻要沒有 commit,都可以通過這個按鈕撤銷修改,點選該按鈕,彈出如下提示框:
這裡會列出來所有修改但是沒有 commit 的檔案,想要撤銷哪個檔案的修改,就勾選該檔案,然後點選 Rollback 按鈕就完成了撤銷操作。
2. commit 了想撤銷
如果已經 commit 了,那麼就需要先打開送出日志,點選如下按鈕打開:
也可以直接點選 IDEA 右上角的時鐘圖示,快速打開送出日志:
送出日志類似下面這樣:
此時的回退就分情況了。
首先這個撤銷操作分兩種:
- Revert Commit
- Undo Commit
我們分别來看。
Undo Commit
Undo Commit 這個操作隻能在最近一次送出上使用,不能在其他送出上使用,最近一次 commit 上,右鍵單擊,如下圖:
其他的 commit 上右鍵單擊:
既然如此,我們就來看看最近的一次 commit 如何 Undo Commit。
在最近一次 commit 日志上右鍵單擊後選擇 Undo Commit,如下圖:
選中後,直接點選 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:
此時會彈出來一個送出的對話框,就是一個普普通通的 commit 對話框,如下:
commit 之後,可以看到内容已經撤銷了,送出日志中也多了一條記錄,如下圖: