IDEA中Git版本回退的兩種實現(xiàn)方案
一、版本回退前置知識
在操作前需明確三個核心概念:工作區(qū) vs 暫存區(qū) vs 倉庫
| 區(qū)域 | 本質 | 操作指令 | 場景舉例 |
|---|---|---|---|
工作區(qū) | 你正在編輯的代碼文件 | 直接修改文件 | 在 UserService.java 中新增代碼 |
暫存區(qū) | 已標記待提交的修改 | git add | 將 UserService.java 添加到提交隊列 |
倉庫 | 已永久保存的歷史版本 | git commit | 生成一個版本號為 a1b2c3d 的提交 |
二、Reset方案:整體改寫歷史
通過移動HEAD指針直接回退到目標版本,會刪除后續(xù)提交記錄,適用于本地或需強制同步遠程的場景。
1、IDEA圖形化操作(推薦)
1.1、查看提交歷史
右鍵項目 → Git → Show History,或在Log標簽頁查看所有提交記錄。

1.2、選擇目標版本
右鍵要回退的提交 → Reset Current Branch to Here(將當前分支重置到此處)。

1.3、選擇回退模式
單擊如上將當前分支重置到此處就會彈窗如下。

解析每個選項前先看下當前項目在所有狀態(tài)的文件

好,四種狀態(tài)文件已經準備完成,開始展示
1.3.1、Soft(推薦)
選擇Soft回退后,僅移動HEAD指針,所有文件內容沒變化。Test1變?yōu)樾薷臓顟B(tài),后續(xù)push遠程版本回退后,可以選擇第一次和第二次的修改內容是否再次提交到遠程倉庫。

1.3.2、Mixed
選擇Mixed回退后,所有文件內容沒變化(與Soft一樣),只是將暫存區(qū)Test3移除到工作區(qū),這樣看來Soft和Mixed的區(qū)別就是清空暫存區(qū)。

1.3.3、Hard(慎用)
選擇Hard回退后,文件內容被還原為第一次提交的狀態(tài)(Test1第二三提交內容和Test3沒提交的內容丟失了),然后暫存區(qū)的整個文件Test3丟失(沒有像Soft和Mixed轉移到工作區(qū)),總得來說就是所有本地修改都會丟失(當然不包括工作區(qū)Test4,因為還沒被git管理)。
此時還沒有push到倉庫(后面講),可以更新代碼將Test1第二三提交的內容找回,但是Test2添加的a和Test3的內容則找不回了(因為當時這些內容都在暫存區(qū),然而Hard已經清空暫存區(qū),丟棄了所有修改)

1.3.4、Keep
選擇Keep回退后,回退版本的文件內容被還原為第一次提交的狀態(tài)(Test1第二三提交內容沒了),其他狀態(tài)的文件內容沒有變化(也就是本地修改內容沒丟失),但是暫存區(qū)文件被移除到工作區(qū)。

這種方式如果回退版本的時候Test1有修改內容,那么回退的時候會彈窗讓你選擇Test1修改沒提交的內容如何處理,類似于解決沖突。(麻煩不推薦)

總結
- Soft 回退:當你只想撤回 commit,但不影響文件內容,適用于你希望修改提交內容或者重新提交時使用(
推薦) - Mixed 回退:當你想撤銷提交并清理暫存區(qū),但保留文件修改,適用于需要重新整理提交時使用(感覺沒用,想保留文件修改可以使用Soft)
- Hard 回退:當你完全不需要當前工作和暫存區(qū)的修改,并且想徹底恢復到某個提交時使用,慎用,因為無法恢復丟失的內容(
保證本地所有修改內容都沒用可以使用) - Keep 回退:當你希望恢復到某個提交的版本,但又不丟失本地修改時使用(恢復版本的文件的本地內容需要手動選擇要還是丟,麻煩不推薦)
1.4、強制推送遠程倉庫
- 回退后本地倉庫版本低于遠程,需執(zhí)行
強制推送 - 在強制推送遠程倉庫前,都可以通過
更新代碼恢復上面的版本回退
方式一(不推薦)
git push --force 是強制推送命令,它會將本地分支的內容強行推送到遠程倉庫,覆蓋遠程分支的歷史記錄。使用此命令時,如果遠程分支的提交歷史與本地分支不同,推送操作仍會進行,并且不會進行任何檢查,可能會丟失遠程倉庫中的更改。因此,這個命令需要小心使用,尤其在多人協(xié)作的情況下,可能會覆蓋他人的更改。
git push --force # 等同于 git push -f
方式二(推薦)
git push --force-with-lease 是 --force 的更安全版本。它會先檢查遠程分支是否被其他人更新,若有變動則推送失敗并提示,避免覆蓋他人更改。該命令會自動推送當前分支到遠程倉庫對應的分支。
git push --force-with-lease # 推薦,避免覆蓋他人提交
2、命令行操作
2.1、查看提交記錄
方式一
git log

方式二
git log --oneline # 獲取目標commit_id(前7位即可)

方式三
idea中直接選擇歷史版本右擊選擇復制修訂號

2.2、執(zhí)行回退
三種不同的回退模式,上面已經詳細介紹了
# 徹底回退(刪除工作區(qū)+暫存區(qū)修改) git reset --hard 62b47d9 # 回退到上一個提交(保留工作區(qū)修改) git reset --soft HEAD\~1 # 回退到前2個版本(保留工作區(qū),暫存區(qū)重置) git reset --mixed HEAD^^
2.3、強制同步遠程
這里與IDEA圖形化操作命令一樣
git push --force-with-lease # 推薦,避免覆蓋他人提交 git push -f origin master # 強制覆蓋遠程分支
三、Revert方案:部分撤銷提交
生成新的提交記錄逆向操作目標版本,保留完整歷史鏈,適合團隊協(xié)作或需審計的場景。
1、IDEA圖形化操作
1.1、撤銷目標提交
僅僅撤銷本次提交歷史的內容,如果此版本后面又添加了b,此次撤銷就需要解決沖突了。

1.2、提交新版本
自動生成Revert "原提交信息"的新提交,需要推送至遠程(相當于我們手動點進這個文件,把添加a的代碼刪除,然后提交推送)

2、命令行操作
# 撤銷單個提交 git revert 62b47d9 # 推送當前分支到遠程倉庫 git push origin 分支
總結
Git版本回退有兩種主要方案:Reset通過移動HEAD指針直接回退,適用于本地或強制同步遠程,Revert通過生成新的提交逆向撤銷,適合團隊協(xié)作并保留歷史記錄;根據(jù)需求選擇合適方式并謹慎操作。
以上就是IDEA中Git版本回退的兩種實現(xiàn)方案的詳細內容,更多關于IDEA Git版本回退的資料請關注腳本之家其它相關文章!
相關文章
Spring?Boot?實現(xiàn)字段唯一校驗功能(實例代碼)
這篇文章主要介紹了Spring?Boot?實現(xiàn)字段唯一校驗,實現(xiàn)代碼很簡單,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
Hibernate Validator實現(xiàn)更簡潔的參數(shù)校驗及一個util
這篇文章主要介紹了Hibernate Validator實現(xiàn)更簡潔的參數(shù)校驗及一個util,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05
詳解spring-cloud與netflixEureka整合(注冊中心)
這篇文章主要介紹了詳解spring-cloud與netflixEureka整合(注冊中心),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-02-02
淺談byte和長度為8的boolean數(shù)組互相轉換
下面小編就為大家?guī)硪黄獪\談byte和長度為8的boolean數(shù)組互相轉換。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11
SpringBoot中的五種對靜態(tài)資源的映射規(guī)則的實現(xiàn)
這篇文章主要介紹了SpringBoot中的五種對靜態(tài)資源的映射規(guī)則的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12

