【DevOps】Git 圖文詳解(八):后悔藥 - 撤銷變更

Git 圖文詳解(八):后悔藥 - 撤銷變更

  • 1.后悔指令 🔥
  • 2.回退版本 reset
  • 3.撤銷提交 revert
  • 4.checkout / reset / revert 總結

發現寫錯了要回退怎么辦?看看下面幾種后悔指令吧!

  • ? 還沒提交的怎么撤銷? —— checkoutreset
    • 還未提交的修改(工作區、暫存區)不想要了,用簽出指令(checkout)進行撤銷清除。
    • 或者用 checkout 的新版回滾指令 reset
  • ? 已提交但沒有 push 的提交如何撤銷?—— resetrevert
  • ? 已 push 的提交如何撤銷?—— 同上,先本地撤銷,然后強制推送 git push origin -f,??注意慎用! 記得先 pull 獲取更新。

在這里插入圖片描述

1.后悔指令 🔥

指令
描述
git checkout .撤銷工作區的(未暫存)修改,把暫存區恢復到工作區。不影響暫存區,如果沒暫存,則撤銷所有工作區修改
git checkout [file]同上,file 指定文件
git checkout HEAD .撤銷工作區、暫存區的修改,用 HEAD 指向的當前分支最新版本替換工作區、暫存區
git checkout HEAD [file]同上,file 指定文件
git reset撤銷暫存區狀態,同 git reset HEAD,不影響工作區
git reset HEAD [file]同上,指定文件 fileHEAD 可省略
git reset [commit]回退到指定版本,清空暫存區,不影響工作區。工作區需要手動 git checkout 簽出
git reset --soft [commit]移動分支 masterHEAD 到指定的版本,不影響暫存區、工作區,需手動 git checkout 簽出更新
git reset --hard HEAD撤銷工作區、暫存區的修改,用當前最新版
git reset --hard HEAD~回退到上一個版本,并重置工作區、暫存區內容
git reset --hard [commit]回退到指定版本,并重置工作區、暫存區內容
git revert [commit]撤銷一個提交,會用一個新的提交(原提交的逆向操作)來完成撤銷操作,如果已 push 則重新 push 即可
  • git checkout .git checkout [file] 會清除工作區中未添加到暫存區的修改,用暫存區內容替換工作區。
  • git checkout HEAD .git checkout HEAD [file] 會清除工作區、暫存區的修改,用 HEAD 指向的當前分支最新版本替換暫存區、工作區。
# 只撤銷工作區的修改(未暫存)
$ git checkout .
Updated 1 path from the index# 撤銷工作區、暫存區的修改
$ git checkout HEAD .
Updated 1 path from f951a96

2.回退版本 reset

reset 是專門用來撤銷修改、回退版本的指令,支持的場景比較多,多種撤銷姿勢,所以參數組合也比較多。簡單理解就是移動 master 分支、HEAD 的 “指針” 地址,理解這一點就基本掌握 reset 了。

如下圖:

  • 回退版本 git reset --hard v4git reset --hard HEAD~2masterHEAD 會指向 v4 提交,v5v6 就被廢棄了。
  • 也可以重新恢復到 v6 版本:git reset --hard v6,就是移動 masterHEAD 的 “指針” 地址。

在這里插入圖片描述
reset 有三種模式,對應三種參數:mixed(默認模式)、softhard。三種參數的主要區別就是對工作區、暫存區的操作不同。

  • mixed 為默認模式,參數可以省略。
  • 只有 hard 模式會重置工作區、暫存區,一般用這個模式會多一點。

在這里插入圖片描述
穿梭前,用 git log 可以查看提交歷史,以便確定要回退到哪個版本。要重返未來,用 git reflog 查看命令歷史,以便確定要回到未來的哪個版本。

git reset [--soft | --mixed | --hard] [HEAD]# 撤銷暫存區
$ git reset
Unstaged changes after reset:
M       R.md# 撤銷工作區、暫存區修改
$ git reset --hard HEAD# 回退版本庫到上一個版本,并重置工作區、暫存
$ git reset --hard HEAD~# 回到原來的版本(恢復上一步的撤銷操作),并重置工作區、暫存
$ git reset --hard 5f8b961# 查看所有歷史提交記錄
$ git reflog
ccb9937 (HEAD -> main, origin/main, origin/HEAD) HEAD@{0}: commit: 報表新增導入功能
8f61a60 HEAD@{1}: commit: bug:修復報表導出bug
4869ff7 HEAD@{2}: commit: 用戶報表模塊開發
4b1028c HEAD@{3}: commit: 財務報表模塊開發完成

3.撤銷提交 revert

安全的撤銷某一個提交記錄,基本原理就是生產一個新的提交,用原提交的逆向操作來完成撤銷操作。注意,這不同于 resetreset 是回退版本,revert 只是用于撤銷某一次歷史提交,操作是比較安全的。

在這里插入圖片描述
如上圖:

  • 想撤銷 v4 的修改,執行 git revert v4,會產生一個新的提交 v-4,是 v4 的逆向操作。
  • 同時更新 maserHEAD “指針” 位置,以及工作區內容。
  • 如果已 push 則重新 push 即可。
# revert撤銷指定的提交,“-m”附加說明
$ git revert 41ea42 -m '撤銷對***的修改'
[main 967560f] Revert "123"1 file changed, 1 deletion(-)

4.checkout / reset / revert 總結

標題 / 指令
checkout
reset
revert
主要作用(撤銷)撤銷工作區、暫存區未提交修改回退版本,重置工作區、暫存區撤銷某一次提交
撤銷工作區git checkout [file]git reset HEAD [file]
撤銷工作區、暫存區git checkout HEAD [file]git reset --hard HEAD [file]
回退版本git reset --hard [commit]
安全性只針對未提交修改,安全如回退了已 push 提交,不安全安全

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

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

相關文章

Visual Studio連接unity編輯器_unity基礎開發教程

Visual Studio連接unity編輯器 問題描述解決方法意外情況 問題描述 當我們在unity編輯器中打開C#腳本的時候發現Visual Studio沒有連接unity編輯器,在編寫代碼的時候也沒有unity關鍵字的提醒。 簡單來說就是敲代碼沒有代碼提示。 解決方法 這時候需要在unity中進行…

Qt實現圖片旋轉的幾種方式(全)

目錄 一、用手搓(QPainter) 二、使用 QGraphicsView 和 QGraphicsPixmapItem 三、使用 QTransform 實現圖像旋轉 四、利用 OpenGL 實現旋轉圖像的效果有幾種不同的方法,其中常見的包括: 手動旋轉繪制: 使用 QPaint…

網絡吞吐量 公網帶寬有關嗎?

環境: 華為交換機 深信服防火墻 問題描述: 網絡吞吐量 公網帶寬有關嗎? 解決方案: 網絡吞吐量網絡吞吐量是指在特定時間內通過網絡傳輸的數據量。它衡量了網絡設備(如防火墻、交換機、路由器)或網絡連…

終端仿真軟件 SecureCRT v9.4.2

SecureCRT是一款終端仿真軟件,它提供了類似于Telnet和SSH等協議的遠程訪問功能。SecureCRT專門為網絡管理員、系統管理員和其他需要保密訪問網絡設備的用戶設計。 SecureCRT具有以下特點: 安全性:SecureCRT支持SSH1、SSH2、SSL和TLS等加密和…

素短語的定義

素短語,是指至少含有一個終結符的短語,并且除自身外,不包含更小的素短語。 最左素短語是句型中最左邊的素短語。

7.HTML中列表標簽

7.列表標簽 7.1無序列表(重點) 表格是用來顯示數據的,那么列表就是用來布局的。 列表最大的特點就是整齊,整潔,有序,他作為布局會更加自由和方便, 根據使用的情景不同,列表可分為三…

數字圖像處理(岡薩雷斯)學習筆記

目錄 一.機器視覺和計算機視覺二.圖像處理基礎1.什么是圖像2.如何訪問圖像 三.圖像仿射變換四.灰度變換 一.機器視覺和計算機視覺 機器視覺(Machine Vision,MV)和計算機視覺(Computer Vision,CV)的區別和聯系: 機器視覺更注重廣義圖像信號(激光&#xff…

C#中的Fody

在C#中,NuGet里的Fody是一個用于.NET應用程序的代碼增強工具。它通過在編譯過程中自動織入代碼,改變目標程序集的行為。Fody的一個常見用途是簡化屬性通知的實現,特別適用于WPF綁定。 在WPF中,屬性通知是一種機制,用于…

C語言操作符例題

這里寫目錄標題 例題一題目解析 例題二題目解析 例題三方法一方法二方法三 例題四例題五 感謝各位大佬對我的支持,如果我的文章對你有用,歡迎點擊以下鏈接 🐒🐒🐒 個人主頁 🥸🥸🥸 C語言 🐿?…

智能指針(Newbie Note)

智能指針專題 1.普通指針的問題2.智能指針是什么什么是所有權 3.智能指針三個好處:4.C11提供的智能指針4.1 shared_ptr(共享所有權指針)4.1.1 分配內存4.1.2 成員函數4.1.3 計數情況匯總:4.1.4 示例代碼(計數)4.1.5 示例代碼(rese…

Java深拷貝與淺拷貝技術解析及實例演示

摘要:本文將詳細介紹Java中的深拷貝和淺拷貝概念,通過分析源碼和舉例說明,幫助讀者更好地理解這兩種拷貝方式的區別及應用場景。 一、深拷貝與淺拷貝的概念 深拷貝:復制一個對象后,無論是基本數據類型還是引用類型&…

多柱漢諾塔問題

k柱漢諾塔 題目描述 漢諾塔(Hanoi Tower),又稱河內塔。 傳說大梵天創造世界的時候做了三根金剛石柱子,按左、中、右排序。大梵天在左側的柱子上,從下往上按照大小順序摞著64片黃金圓盤,越靠下的圓盤越大。…

個人博客項目 - 測試報告

文章目錄 一、項目背景二、測試報告功能測試1.編寫測試用例2.登錄測試3.編寫文章測試4.查看文章測試5.刪除文章測試7.注銷登錄測試 自動化測試性能測試1.VUG2.進行場景設計3.生成性能測試報告 總結 本文開始 一、項目背景 通過學習測試相關的知識,動手實踐并測試一…

2023 年 亞太賽 APMCM ABC題 國際大學生數學建模挑戰賽 |數學建模完整代碼+建模過程全解全析

當大家面臨著復雜的數學建模問題時,你是否曾經感到茫然無措?作為2022年美國大學生數學建模比賽的O獎得主,我為大家提供了一套優秀的解題思路,讓你輕松應對各種難題。 以五一杯 A題為例子,以下是咱們做的一些想法呀&am…

【Vue】自定義指令

自定義指令 自定義指令就是自己定義的指令,是對 DOM 元素進行底層操作封裝 ,程序化地控制 DOM,拓展額外的功能 全局定義 Vue.directive(指令名字, definition) 指令名:不包括v-前綴,使用時候包括v-,v-指令名defini…

CUTLASS 1.3.3中的 Volta884_h884gemm

CUTLASS 是 CUDA C 模板抽象的集合,用于在 CUDA 內的所有級別和規模上實現高性能矩陣-矩陣乘法 (GEMM) 和相關計算。它采用了類似于 cuBLAS 和 cuDNN 中實現的分層分解和數據移動策略。 CUTLASS 最新版本為3.3,相比1.3.3變動較大。然而重溫一下1.3.3仍然…

生產問題 Recv-Q101

生產上服務端口 Recv-Q101 新請求到服務器的失敗,幸好及時發現,通過重啟服務之后得到解決,具體原因等待排查 目前覺得的原因是:某些請求暫用時間比較久

Linux超簡單部署個人博客

1 安裝halo 1.1 切換到超級用戶 sudo -i 1.2 新建halo文件夾 mkdir ~/halo && cd ~/halo 1.3 編輯docker-compose.yml文件 vim ~/halo/docker-compose.yml 英文輸入法下,按 i version: "3"services:halo:image: halohub/halo:2.10container_…

2017年全國碩士研究生入學統一考試管理類專業學位聯考數學試題——解析版

文章目錄 2017 級考研管理類聯考數學真題解析一、問題求解(本大題共 5 小題,每小題 3 分,共 45 分)下列每題給出 5 個選項中,只有一個是符合要求的,請在答題卡上將所選擇的字母涂黑。真題(2017-…

Python 提高篇學習筆記(一):深拷貝和淺拷貝

文章目錄 一、什么是對象的引用二、深拷貝和淺拷貝2.1 淺拷貝(Shallow Copy)2.2 深拷貝(Deep Copy)2.3 copy.copy和copy.deepcopy的區別 一、什么是對象的引用 在 Python 中,對象的引用是指變量指向內存中某個對象的地址或標識符。當你創建一個新的對象(比如一個整…