Git如何實現(xiàn)撤銷提交(命令行+IDEA)
概覽、Git代碼管理的幾個狀態(tài)及倒回
一、基于命令行
1. 工作區(qū)的代碼想撤銷
可能有一天我正在寫代碼,寫了很久發(fā)現(xiàn)寫錯了,想恢復到一開始的狀態(tài),一個笨辦法就是把剛剛寫的代碼一行一行的刪除,不過這種方式成本太高,我們可以通過git checkout – <file> 命令來撤銷工作區(qū)的代碼修改。
如下圖:
首先我們執(zhí)行了 git status 命令,發(fā)現(xiàn)工作區(qū)是干凈的,然后執(zhí)行了 cat 命令,發(fā)現(xiàn)文件只有兩行內(nèi)容,然后通過 vi 編輯器向文件中添加一行,保存并退出,退出來之后又執(zhí)行了 git status 命令,此時工作區(qū)的狀態(tài)已經(jīng)發(fā)生變化,然后我們執(zhí)行了 git checkout – git01.txt 命令,表示撤銷之前的操作,讓 git01.txt 恢復到之前的狀態(tài),該命令執(zhí)行成功之后,我們再執(zhí)行 cat 命令發(fā)現(xiàn)文件內(nèi)容已經(jīng)恢復了,此時再執(zhí)行 git status,狀態(tài)也恢復了。
總結
git status 回顯 modified: yourfile git checkout -- yourfile git status 回顯working tree clean
2. add到暫存區(qū)的代碼想撤銷
如果想要撤銷,但是代碼已經(jīng)提交到暫存區(qū)了,不用擔心,也能撤銷,分兩個步驟:
- 將暫存區(qū)的代碼撤銷到工作區(qū)
- 將工作區(qū)的代碼撤銷(具體操作和1小節(jié)一致)
將暫存區(qū)的代碼撤銷,我們可以使用 git reset HEAD 命令來實現(xiàn)。
如下圖:
這里的代碼都比較簡單,核心的過程就是先執(zhí)行 git reset HEAD 命令,從暫存區(qū)撤銷,剩下的操作參考 1 小節(jié)。
總結
git add afile git status git reset HEAD git status git checkout -- afile git status
3. 提交到本地倉庫的代碼想撤銷
同樣的,提交到本地倉庫的代碼一樣也可以撤銷,我們可以利用 git reset --hard <版本號> 命令來實現(xiàn)版本回退,該命令中的版本號有幾種不同的寫法:
可以使用 HEAD^ 來描述版本,一個 ^ 表示前一個版本,兩個 ^^ 表示前兩個版本,以此類推。
也可以使用數(shù)字來代替 ^,比如說前 100 個版本可以寫作 HEAD~100。
也可以直接寫版本號,表示跳轉到某一個版本處。我們每次提交成功后,都會生成一個哈希碼作為版本號,所以這里我們也可以直接填版本號,哈希碼很長,但是我們不用全部輸入,只需要輸入前面幾個字符即可,就能識別出來。
看下面一系列的操作:
通過 git log 查看當前提交日志:
git log --pretty=short
通過 git reset HEAD^^ 向前回退兩個版本:
git reset --hard HEAD^^
查看日志,發(fā)現(xiàn)最后一次提交的版本號是 695ce1fe,利用 git reset --hard 695ce1fe 命令回退:
git reset --hard 695ce1fe
通過 git reset --hard HEAD~1 回到上一個版本:
git reset --hard HEAD~1
當然以上操作都是基于命令行的,如果你命令行操作比較熟練的話,其實命令行操作比 IDEA 上點點點要快很多。
4. 遠程倉庫的代碼想要撤銷
如果代碼提交到遠程倉庫了,想要撤銷,那就如 3 小節(jié)所講,先在本地倉庫撤銷,然后 push 到遠程倉庫即可。
二、基于 IDEA
1. 未提交就撤銷
對于第一小節(jié)的前兩種撤銷操作,即修改的文件還沒 commit,此時想要撤銷,方式很簡單,點擊 IDEA 右上角的撤銷按鈕:
如果你修改了文件,無論有沒有執(zhí)行 git add 命令,只要沒有 commit,都可以通過這個按鈕撤銷修改,點擊該按鈕,彈出如下提示框:
這里會列出來所有修改但是沒有 commit 的文件,想要撤銷哪個文件的修改,就勾選該文件,然后點擊 Rollback 按鈕就完成了撤銷操作。
2. commit 了想撤銷
如果已經(jīng) commit 了,那么就需要先打開提交日志,點擊如下按鈕打開:
也可以直接點擊 IDEA 右上角的時鐘圖標,快速打開提交日志:
提交日志類似下面這樣:
此時的回退就分情況了。
首先這個撤銷操作分兩種:
- Revert Commit
- Undo Commit
我們分別來看。
Undo Commit
Undo Commit 這個操作只能在最近一次提交上使用,不能在其他提交上使用,最近一次 commit 上,右鍵單擊,如下圖:
其他的 commit 上右鍵單擊:
既然如此,我們就來看看最近的一次 commit 如何 Undo Commit。
在最近一次 commit 日志上右鍵單擊后選擇 Undo Commit,如下圖:
選中后,直接點擊 OK,撤銷最近一次的 commit。
這就是撤銷最近一次 commit,撤銷之后,本地的修改相當于變成了已 add 但是未 commit 的狀態(tài),此時我們可以繼續(xù)開發(fā)新代碼,然后再 commit,再 push;或者也可以像 1 小節(jié)介紹的那樣,繼續(xù)撤銷操作。
我電腦上的 IDEA 在這塊操作中有個偶發(fā)性問題,就是撤銷掉 commit 之后,IDEA 檢測不到文件處于未提交狀態(tài),需要我把 IDEA 關掉重新打開,IDEA 就能發(fā)現(xiàn)文件處于未提交狀態(tài)了,此時就可以按照 1 小節(jié)的步驟繼續(xù)回退了,這塊小伙伴們在試驗的時候可以留意下。
Revert Commit
Revert Commit 這個操作到處都能用,不同于 Undo Commit,Revert Commit 之后,會產(chǎn)生一條提交記錄。相當于 Revert Commit 其實也是提交,只不過提交的內(nèi)容剛好相反,剛好刷掉已有內(nèi)容。
Revert Commit 操作可以用在所有的日志上,而不僅僅是剛剛提交的 commit。
操作方式如下:
找到需要回滾的地方,右鍵單擊,選擇 Revert Commit:
此時會彈出來一個提交的對話框,就是一個普普通通的 commit 對話框,如下:
commit 之后,可以看到內(nèi)容已經(jīng)撤銷了,提交日志中也多了一條記錄,如下圖:
3. push 了想撤銷
如果已經(jīng) push 到遠程倉庫了,怎么撤銷?
其實跟 2 小節(jié)一樣,先在本地倉庫撤銷,撤銷完成后,重新修改代碼,最后再 force push 就行了,不過 force push 的時候,注意別把同事的代碼給覆蓋了。
所以一定是先commit到本地倉庫,改完確認了再push到遠程倉庫。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
WebSocket部署到服務器出現(xiàn)連接失敗問題的分析與解決
這篇文章主要給大家介紹了關于WebSocket部署到服務器出現(xiàn)連接失敗問題的分析與解決方法,文中給出了詳細的介紹供大家參考學習,文末也給出了demo下載地址,需要的朋友們可以下載學習,下面隨著小編來一起學習學習吧。2017-10-10提高github下載速度的方法可達到2MB/s(100%有效)
這篇文章主要介紹了提高github下載速度的方法可達到2MB/s(100%有效),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08使用TeXLive2022和VSCode安裝配置步驟(LaTeX寫論文)
這篇文章主要介紹了使用TeXLive2022和VSCode的安裝配置步驟,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07