IDEA中Git版本回退終極指南:Reset與Revert雙方案詳解

目錄

  • 前言
  • 一、版本回退前置知識
  • 二、Reset方案:整體改寫歷史
    • 1、IDEA圖形化操作(推薦)
      • 1.1、查看提交歷史
      • 1.2、選擇目標版本
      • 1.3、選擇回退模式
        • 1.3.1、Soft(推薦)
        • 1.3.2、Mixed
        • 1.3.3、Hard(慎用)
        • 1.3.4、Keep
      • 1.4、強制推送遠程倉庫
    • 2、命令行操作
      • 2.1、查看提交記錄
      • 2.2、執行回退
      • 2.3、強制同步遠程
  • 三、Revert方案:部分撤銷提交
    • 1、IDEA圖形化操作
      • 1.1、撤銷目標提交
      • 1.2、提交新版本
    • 2、命令行操作
  • 總結

前言

??作為開發者,代碼版本回退是日常高頻操作。IntelliJ IDEA集成了強大的Git工具鏈,但面對resetrevert兩種核心回退方案,許多開發者仍存在選擇困惑。本文將解析Reset與Revert兩種方案的操作細節及避坑指南。

一、版本回退前置知識

在操作前需明確三個核心概念:工作區 vs 暫存區 vs 倉庫

區域本質操作指令場景舉例
工作區你正在編輯的代碼文件直接修改文件在 UserService.java 中新增代碼
暫存區已標記待提交的修改git add將 UserService.java 添加到提交隊列
倉庫已永久保存的歷史版本git commit生成一個版本號為 a1b2c3d 的提交

二、Reset方案:整體改寫歷史

??通過移動HEAD指針直接回退到目標版本,會刪除后續提交記錄,適用于本地或需強制同步遠程的場景。

1、IDEA圖形化操作(推薦)

1.1、查看提交歷史

??右鍵項目 → Git → Show History,或在Log標簽頁查看所有提交記錄。

在這里插入圖片描述

1.2、選擇目標版本

??右鍵要回退的提交 → Reset Current Branch to Here(將當前分支重置到此處)。

在這里插入圖片描述

1.3、選擇回退模式

??單擊如上將當前分支重置到此處就會彈窗如下。

在這里插入圖片描述

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

在這里插入圖片描述

好,四種狀態文件已經準備完成,開始展示

1.3.1、Soft(推薦)

??選擇Soft回退后,僅移動HEAD指針,所有文件內容沒變化。Test1變為修改狀態,后續push遠程版本回退后,可以選擇第一次和第二次的修改內容是否再次提交到遠程倉庫。

在這里插入圖片描述

1.3.2、Mixed

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

在這里插入圖片描述

1.3.3、Hard(慎用)

??選擇Hard回退后,文件內容被還原為第一次提交的狀態(Test1第二三提交內容和Test3沒提交的內容丟失了),然后暫存區的整個文件Test3丟失(沒有像Soft和Mixed轉移到工作區),總得來說就是所有本地修改都會丟失(當然不包括工作區Test4,因為還沒被git管理)。

??此時還沒有push到倉庫(后面講),可以更新代碼將Test1第二三提交的內容找回,但是Test2添加的a和Test3的內容則找不回了(因為當時這些內容都在暫存區,然而Hard已經清空暫存區,丟棄了所有修改

在這里插入圖片描述

1.3.4、Keep

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

在這里插入圖片描述

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

在這里插入圖片描述

總結

  • Soft 回退:當你只想撤回 commit,但不影響文件內容,適用于你希望修改提交內容或者重新提交時使用(推薦

  • Mixed 回退:當你想撤銷提交并清理暫存區,但保留文件修改,適用于需要重新整理提交時使用(感覺沒用,想保留文件修改可以使用Soft)

  • Hard 回退:當你完全不需要當前工作和暫存區的修改,并且想徹底恢復到某個提交時使用,慎用,因為無法恢復丟失的內容(保證本地所有修改內容都沒用可以使用

  • Keep 回退:當你希望恢復到某個提交的版本,但又不丟失本地修改時使用(恢復版本的文件的本地內容需要手動選擇要還是丟,麻煩不推薦)

1.4、強制推送遠程倉庫

  • 回退后本地倉庫版本低于遠程,需執行強制推送
  • 在強制推送遠程倉庫前,都可以通過更新代碼恢復上面的版本回退

方式一(不推薦)

??git push --force 是強制推送命令,它會將本地分支的內容強行推送到遠程倉庫,覆蓋遠程分支的歷史記錄。使用此命令時,如果遠程分支的提交歷史與本地分支不同,推送操作仍會進行,并且不會進行任何檢查,可能會丟失遠程倉庫中的更改。因此,這個命令需要小心使用,尤其在多人協作的情況下,可能會覆蓋他人的更改。

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、執行回退

三種不同的回退模式,上面已經詳細介紹了

# 徹底回退(刪除工作區+暫存區修改)
git reset --hard 62b47d9   # 回退到上一個提交(保留工作區修改)
git reset --soft HEAD\~1   # 回退到前2個版本(保留工作區,暫存區重置)
git reset --mixed HEAD^^   

2.3、強制同步遠程

這里與IDEA圖形化操作命令一樣

git push --force-with-lease   # 推薦,避免覆蓋他人提交git push -f origin master   # 強制覆蓋遠程分支

三、Revert方案:部分撤銷提交

??生成新的提交記錄逆向操作目標版本,保留完整歷史鏈,適合團隊協作或需審計的場景。

1、IDEA圖形化操作

1.1、撤銷目標提交

僅僅撤銷本次提交歷史的內容,如果此版本后面又添加了b,此次撤銷就需要解決沖突了。

在這里插入圖片描述

1.2、提交新版本

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

在這里插入圖片描述

2、命令行操作

# 撤銷單個提交
git revert 62b47d9  
# 推送當前分支到遠程倉庫
git push origin 分支

總結

??Git版本回退有兩種主要方案:Reset通過移動HEAD指針直接回退,適用于本地或強制同步遠程,Revert通過生成新的提交逆向撤銷,適合團隊協作并保留歷史記錄;根據需求選擇合適方式并謹慎操作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72799.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72799.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72799.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP并發請求優化:使用`curl_multi_select()`實現高效的多請求處理

PHP并發請求優化:使用curl_multi_select()實現高效的多請求處理 背景 最近在項目中遇到一個需求,需要從多個 1 級網站(超過 200 個)獲取數據,并且是通過 POST 請求瞬間發送到這些網站上。開始時我直接使用了 curl_ex…

【leetcode hot 100 206】反轉鏈表

解法一:(頭插法)在遍歷鏈表時,將當前節點的 next 指針改為指向前一個節點。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val)…

【QT】-易錯點筆記-2025-2-7

1,QList<phy_simulator*> pList;為空不能append()追加,要先new,再用 QList<phy_simulator> pList為空時,確實不能調用 append() 方法。原因很簡單,QList 是一個類對象,在 C++ 中,指針本身并不代表它指向的對象。因此,當你有一個指向 QList<phy_simulato…

AI-Deepseek + PPT

01--Deepseek提問 首先去Deepseek問一個問題&#xff1a; Deepseek的回答&#xff1a; 在汽車CAN總線通信中&#xff0c;DBC文件里的信號處理&#xff08;如初始值、系數、偏移&#xff09;主要是為了 將原始二進制數據轉換為實際物理值&#xff0c;確保不同電子控制單元&…

實驗一:在Windows 10/11下配置和管理TCP/IP

目錄 1.【實訓目標】 2.【實訓環境】 3.【實訓內容】 4.【實訓步驟】 1.【實訓目標】 1.了解網絡基本配置中包含的協議、服務、客戶端。 2.了解Windows支持的網絡協議及參數設置方法。 3.掌握TCP/IP協議的配置。 2.【實訓環境】 硬件環境&#xff1a;每人一臺計算機&a…

Java直通車系列14【Spring MVC】(深入學習 Controller 編寫)

目錄 基本概念 編寫 Controller 的步驟和要點 1. 定義 Controller 類 2. 映射請求 3. 處理請求參數 4. 調用業務邏輯 5. 返回響應 場景示例 1. 簡單的 Hello World 示例 2. 處理路徑變量和請求參數 3. 處理表單提交 4. 處理 JSON 數據 5. 異常處理 基本概念 Cont…

EA - 開源工程的編譯

文章目錄 EA - 開源工程的編譯概述筆記環境備注x86版本EABase_x86EAAssert_x86EAThread_x86修改 eathread_atomic_standalone_msvc.h原始修改后 EAStdC_x86EASTL_x86EAMain_x86EATest_x86備注備注END EA - 開源工程的編譯 概述 EA開源了‘命令與征服’的游戲源碼 嘗試編譯. 首…

一招解決Pytorch GPU版本安裝慢的問題

Pytorch是一個流行的深度學習框架&#xff0c;廣泛應用于計算機視覺、自然語言處理等領域。安裝Pytorch GPU版本可以充分利用GPU的并行計算能力&#xff0c;加速模型的訓練和推理過程。接下來&#xff0c;我們將詳細介紹如何在Windows操作系統上安裝Pytorch GPU版本。 查看是否…

為解決局域網IP、DNS切換的Windows BAT腳本

一、背景 為解決公司普通人員需要切換IP、DNS的情況&#xff0c;于是搞了個windows下的bat腳本&#xff0c;可以對有線網絡、無線網絡進行切換設置。 腳本內容 echo off title 多網絡接口IP切換工具:menu cls echo echo 請選擇要配置的網絡接口: echo echo 1. 有線網絡&am…

uni_app實現下拉刷新

1. 在頁面配置中啟用下拉刷新 首先&#xff0c;你需要在頁面的 pages.json 文件中啟用下拉刷新功能。 {"pages": [{"path": "pages/index/index","style": {"navigationBarTitleText": "首頁","enablePull…

OpenCV計算攝影學(14)實現對比度保留去色(Contrast Preserving Decolorization)的函數decolor()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 將彩色圖像轉換為灰度圖像。它是數字印刷、風格化的黑白照片渲染&#xff0c;以及許多單通道圖像處理應用中的基本工具。 cv::decolor 是 OpenCV…

Qt常用控件之 縱向列表QListWidget

縱向列表QListWidget QListWidget 是一個縱向列表控件。 QListWidget屬性 屬性說明currentRow當前被選中的是第幾行。count一共有多少行。sortingEnabled是否允許排序。isWrapping是否允許換行。itemAlignment元素的對齊方式。selectRectVisible被選中的元素矩形是否可見。s…

關于 QPalette設置按鈕背景未顯示出來 的解決方法

若該文為原創文章&#xff0c;轉載請注明原文出處 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/146047054 長沙紅胖子Qt&#xff08;長沙創微智科&#xff09;博文大全&#xff1a;開發技術集合&#xff08;包含Qt實用技術、樹莓派、三維、OpenCV…

PostgreSQL 安裝與使用

下載地址: EDB: Open-Source, Enterprise Postgres Database Management 安裝圖形化安裝界面安裝。安裝完后將bin目錄配置到系統環境變量 執行psql -h localhost -p 5432 -U postgres 密碼在安裝過程中設置的 ? 0、修改密碼 ALTER USER sonar WITH PASSWORD 123456; 1、新…

【基礎3】快速排序

核心思路 快速排序是Java中Arrays.sort()的實現原理&#xff0c;采用分治策略&#xff0c;通過選擇基準元素&#xff0c;將數組分為兩個子數組&#xff0c;使得左邊元素 ≤ 基準元素 ≤ 右邊元素&#xff0c;然后遞歸排序子數組。 舉個簡單的例子&#xff0c;圖書管理員需要按…

FreeSWITCH 簡單圖形化界面40 - 使用mod_curl模塊進行http請求

FreeSWITCH 簡單圖形化界面40 - 使用mod_curl模塊進行http請求 0、界面預覽00、簡介1、編譯安裝1.1 編輯模塊配置文件 2、使用2.1 撥號規則GET 請求POST 請求JSON 數據 2.2 Lua 腳本GET 請求POST 請求JSON 數據 3 、示例3.1 示例 1&#xff1a;提交 CDR 到第三方接口3.2 示例 2…

Linux 開發工具

linux中&#xff0c;常見的軟件安裝方式---下載 yum/apt.rpm安裝包安裝源碼安裝 yum 查看軟件包 通過yumlist命令可以羅列出當前?共有哪些軟件包.由于包的數?可能?常之多,這?我們需要使? grep 命令只篩選出我們關注的包.例如: # Centos $ yum list | grep lrzsz lr…

Agent革命:Manus如何用工作流拆解掀起AI生產力革命

一、現象級產品的誕生背景 2025年3月6日&#xff0c;一款名為Manus的AI產品在技術圈引發地震式傳播。其官方測試數據顯示&#xff1a;在GAIA基準測試中&#xff0c;基礎任務準確率達86.5%&#xff08;接近人類水平&#xff09;&#xff0c;中高級任務完成率突破57%。這標志著A…

Linux13-TCP\HTTP

一、TCP粘包問題 1.TCP在接受數據時,多包數據粘在一起 2.原因: 2.1TCP發送數據時,會根據緩沖區數據的情況進行重新組包 2.2TCP接收方,沒有及時讀走緩沖區數據,導致緩沖區大量數據緩存。 3.如何解決 3.1發指定大小字節 將要發數據,封裝在結構體里 struct data { …

網絡安全等級保護2.0 vs GDPR vs NIST 2.0:全方位對比解析

在網絡安全日益重要的今天&#xff0c;各國紛紛出臺相關政策法規&#xff0c;以加強信息安全保護。本文將對比我國網絡安全等級保護2.0、歐盟的GDPR以及美國的NIST 2.0&#xff0c;分析它們各自的特點及差異。 網絡安全等級保護2.0 網絡安全等級保護2.0是我國信息安全領域的一…