【Git】View Submitted Updates——diff、show、log

在這里插入圖片描述

在 Git 中查看更新的內容(即工作區、暫存區或提交之間的差異)是日常開發中的常見操作。以下是常用的命令和場景說明:

文章目錄

  • 1、查看工作區與暫存區的差異
  • 2、查看提交歷史中的差異
  • 3、查看工作區與最新提交的差異
  • 4、查看兩個提交之間的差異
  • 5、查看某次提交的單個文件差異
  • 6、圖形化工具
  • 7、常用選項
  • 8、總結
  • 附錄A——git 如何查看歷史提交文件的 md5sum 值
  • 附錄B——git log 如何下滑到最后
  • 附錄C——工作區 vs 暫存區

1、查看工作區與暫存區的差異

命令:git diff

作用:顯示工作區中已修改但未暫存(未執行 git add)的文件內容變化。

示例:

git diff  # 查看所有文件的差異
git diff path/to/file  # 查看指定文件的差異

命令:git diff --stagedgit diff --cached

作用:顯示已暫存(執行過 git add)但未提交的文件內容變化。

示例:

git diff --staged

2、查看提交歷史中的差異

命令:git log -p

作用:查看提交歷史,并顯示每次提交的代碼差異(-p 表示顯示補丁內容)。

示例:

git log -p -2  # 查看最近2次提交的差異

-p 僅顯示描述信息


命令:git show <commit-hash>

作用:查看某次提交的詳細信息,包括修改的文件和具體內容差異。

示例:

git show HEAD  # 查看最新提交的差異
git show abc123  # 查看指定提交哈希的差異

3、查看工作區與最新提交的差異

命令:git diff HEAD

作用:比較工作區與最新提交(HEAD)之間的所有差異(包括未暫存的修改)。

示例:

git diff HEAD

4、查看兩個提交之間的差異

命令:git diff <commit1> <commit2>

作用:比較兩個提交之間的代碼差異。

示例:

git diff abc123 def456  # 比較兩次提交的差異
git diff HEAD~2 HEAD  # 比較當前提交與前兩次提交的差異

5、查看某次提交的單個文件差異

命令:git show <commit-hash>:<file-path>

作用:查看某次提交中指定文件的修改內容。

示例:

git show HEAD:src/main.c  # 查看最新提交中 main.c 文件的修改

6、圖形化工具

如果習慣圖形化界面,可以使用以下工具:

gitk:Git 自帶的圖形化歷史查看工具。

gitk  # 打開圖形化界面

VS Code、IntelliJ 等 IDE:內置 Git 插件,支持可視化查看差異。

7、常用選項

--name-only:僅顯示修改的文件名,不顯示具體內容。

bash

git diff --name-only

--stat:顯示修改的統計信息(如增刪行數)。

git diff --stat

8、總結

在這里插入圖片描述

附錄A——git 如何查看歷史提交文件的 md5sum 值

在 Git 中,直接查看歷史提交文件的 MD5 哈希值(或其他哈希值)并不是一個內置功能,但可以通過組合 Git 命令和外部工具(如 md5sum)來實現。

方法 1:通過 git show 和管道計算 MD5(推薦,簡潔明了)

使用 git show 獲取文件內容,然后通過管道傳遞給 md5sum(Linux/macOS)。

Linux/macOS 示例:

git show <commit-hash>:<file-path> | md5sum

示例:

git show HEAD:src/main.c | md5sum

方法 2:通過 git cat-file 獲取文件內容并計算 MD5(半推薦,指令會長一些)

第一步:使用 git rev-parse 獲取文件在某次提交中的 Blob 哈希。

第二步:通過 Blob 哈希獲取文件內容并計算 MD5

git cat-file -p $(git rev-parse <commit-hash>:<file-path>) | md5sum

示例

git cat-file -p $(git rev-parse HEAD:src/main.c) | md5sum

方法 3:導出歷史文件版本后計算 MD5(不太推薦,需要導出(覆蓋、替換)文件)

第一步:導出某次提交的文件到工作區

git checkout <commit-hash> -- <file-path>

eg

git checkout abc123 -- src/main.c

第二步:計算導出的文件的 MD5

md5sum src/main.c

方法 4:批量查看歷史提交的 MD5(腳本實現)

如果需要批量查看某個文件在不同提交中的 MD5,可以編寫腳本(以 Linux/macOS 為例):

#!/bin/bash
FILE_PATH="src/main.c"
for commit in $(git rev-list HEAD -- $FILE_PATH); domd5=$(git show $commit:$FILE_PATH | md5sum | awk '{print $1}')echo "Commit $commit: MD5=$md5"
done

注意事項

  • 跨平臺兼容性:Windows 用戶需使用 CertUtil 或安裝 md5sum 工具(如 Git Bash 自帶)。

  • 大文件性能:對于大文件,管道操作可能較慢,建議使用方法 3(導出文件后計算)。

  • Git 歷史記錄:如果文件被重命名或移動,需使用 git log --follow <file-path> 跟蹤完整歷史。

附錄B——git log 如何下滑到最后

在這里插入圖片描述

圖方便可以離線分析,git log > log.txt

附錄C——工作區 vs 暫存區

在 Git 中,工作區(Working Directory)和暫存區(Stage/Index)是版本控制流程中的兩個關鍵概念,它們共同協作以實現代碼的有效管理和版本控制。

一、工作區(Working Directory)

定義:

  • 工作區是指開發者在本地計算機上實際編輯和修改文件的區域。簡單來說,就是你在計算機上看到的項目文件夾,里面包含了你當前正在處理的代碼文件、資源文件等。

特點:

  • 動態性:工作區的文件狀態會隨著你的編輯操作而實時變化。
  • 非版本控制:默認情況下,工作區的文件不受 Git 版本控制,除非你明確地將它們添加到 Git 的管理中。

作用:

  • 開發者在這里進行代碼的編寫、修改和測試。
  • 是開發者與項目交互的直接界面。

二、暫存區(Stage/Index)

定義:

  • 暫存區是 Git 中的一個特殊區域,用于臨時保存即將被提交到版本庫的更改。它像一個“購物車”,你可以在這里挑選和整理要提交的更改。

特點:

  • 臨時性:暫存區中的更改只是臨時保存,還沒有真正成為版本庫的一部分。
  • 可控性:你可以自由地選擇將哪些更改添加到暫存區,以及從暫存區中移除哪些更改。

作用:

  • 精細化控制:允許你選擇性地提交更改,而不是一次性提交所有工作區的更改。
  • 準備提交:在提交更改到版本庫之前,先在暫存區中進行整理和確認。

三、工作區與暫存區的協作流程

  • 修改文件:在工作區中編輯和修改文件。
  • 添加到暫存區:使用 git add 命令將修改后的文件添加到暫存區。此時,這些更改就被標記為“待提交”。
  • 提交到版本庫:使用 git commit 命令將暫存區中的更改提交到版本庫。提交后,暫存區中的更改就被永久地記錄在版本庫中,同時暫存區被清空,等待下一次的更改添加。

四、示例說明

假設你正在開發一個項目,并修改了幾個文件。現在,你想將這些更改提交到版本庫中:

(1)在工作區中修改文件:你編輯了 file1.txt 和 file2.txt。

(2)添加到暫存區

git add file1.txt file2.txt

這樣,file1.txt 和 file2.txt 的更改就被添加到了暫存區。

(3)提交到版本庫

git commit -m "修改了 file1.txt 和 file2.txt"

提交后,這些更改就被永久地記錄在版本庫中。

工作區和暫存區是 Git 版本控制流程中的兩個重要環節。工作區是開發者進行代碼編輯和修改的地方,而暫存區則是用于臨時保存即將被提交到版本庫的更改的區域。 通過合理地使用這兩個區域,開發者可以更加精細地控制代碼的提交過程,確保版本庫中的代碼始終保持整潔和有序。

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

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

相關文章

deepseek原理和項目實戰筆記2 -- deepseek核心架構

混合專家&#xff08;MoE&#xff09; ??混合專家&#xff08;Mixture of Experts, MoE&#xff09;?? 是一種機器學習模型架構&#xff0c;其核心思想是通過組合多個“專家”子模型&#xff08;通常為小型神經網絡&#xff09;來處理不同輸入&#xff0c;從而提高模型的容…

GPU層次結構(Nvidia和Apple M芯片,從硬件到pytorch)

這里寫目錄標題 0、驅動pytorch環境安裝驗證1.window環境2.Mac Apple M芯片環境 1、Nvidia顯卡驅動、CUDA、cuDNN關系匯總1**1. Nvidia顯卡驅動&#xff08;Graphics Driver&#xff09;****2. CUDA&#xff08;Compute Unified Device Architecture&#xff09;****3. cuDNN&a…

OpenWrt 搭建 samba 服務器的方法并解決 Windows 不允許訪問匿名服務器(0x80004005的錯誤)的方法

文章目錄 一、安裝所需要的軟件二、配置自動掛載三、配置 Samba 服務器四、配置 Samba 訪問用戶和密碼&#xff08;可選&#xff09;新建 Samba 專門的用戶添加無密碼的 Samba 賬戶使用root賬戶 五、解決 Windows 無法匿名訪問Samba方案一 配置無密碼的Samba賬戶并啟用匿名訪問…

CentOS 7鏡像源替換

更換為阿里云鏡像源&#xff08;適用于 CentOS 7&#xff09; 1、備份原來的 repo 文件&#xff1a; mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2、下載阿里云的 CentOS 7 repo 文件&#xff1a; curl -o /etc/yum.repos.d/CentOS-Base…

功能結構整理

C# Sxer Sxer.Base&#xff1a;基礎子功能 Sxer.Base.Debug&#xff1a;打印 Sxer.Utility&#xff1a;工具類 Sxer.CustomFunction&#xff1a;獨立功能點開發 Unity

云計算Linux Rocky day02(安裝Linux系統、設備表示方式、Linux基本操作)

云計算Linux Rocky day02&#xff08;安裝Linux系統、設備表示方式、Linux基本操作&#xff09; 目錄 云計算Linux Rocky day02&#xff08;安裝Linux系統、設備表示方式、Linux基本操作&#xff09;1、虛擬機VMware安裝Rocky2、Linux命令行3、Linux Rocky修改字體大小和背景顏…

【論文閱讀】《PEACE: Empowering Geologic Map Holistic Understanding with MLLMs》

目錄 前言一、研究背景與問題1-1、地質圖的重要性1-2、現有MLLMs的不足 二、 主要貢獻2-1、GeoMap-Bench&#xff1a;首個地質圖理解評估基準2-2、GeoMap-Agent&#xff1a;首個地質圖專用AI代理2-3、實驗驗證與性能優勢 三、關鍵技術3-1、 數據構建與預處理3-2、分層信息提取&…

計算機網絡通信技術與協議(八)----關于IS-IS的基礎概念

關于IS&#xff0d;IS最早是ISO為CLNP&#xff08;Connectionless Network Protocol&#xff0c;無連接網絡協議&#xff09;而設計的一種動態路由協議。 目錄 這里提到了CLNP這個概念&#xff0c;在這里解釋一下&#xff1a; CLNS由以下三個協議構成&#xff1a; 那么為什…

網絡原理1

協議 在網絡通信中&#xff0c;協議是非常重要的概念。協議是在網絡通信過程中的約定。發送方和接收方需要提前商量好數據的格式&#xff0c;才能確保正確進行溝通。 應用層協議 應用層&#xff0c;對應著應用程序&#xff0c;是跟我們程序員打交道最多的一層。調用操作系統…

【運維】統信UOS操作系統aarch64自制OpenSSH 9.6p1 rpm包(含ssh-copy-id命令)修復漏洞

為修復如下OpenSSH漏洞&#xff0c;openssh從8.2升級至9.6&#xff0c;然而并未找到統信9.6的rpm源&#xff0c;所以自己動手制作&#xff0c;折騰了一天&#xff0c;在此記錄一下 準備工作 檢查版本 cat /etc/os-releaseuname -a如圖當前環境為aarch64架構&#xff0c;在其…

CI/CD 持續集成、持續交付、持續部署

CI/CD 是 持續集成&#xff08;Continuous Integration&#xff09; 和 持續交付/持續部署&#xff08;Continuous Delivery/Deployment&#xff09; 的縮寫&#xff0c;代表現代軟件開發中通過自動化流程快速、可靠地構建、測試和發布代碼的實踐。其核心目標是 減少人工干預、…

Spring Boot 應用中實現配置文件敏感信息加密解密方案

Spring Boot 應用中實現配置文件敏感信息加密解密方案 背景與挑戰 &#x1f6a9;一、設計目標 &#x1f3af;二、整體啟動流程 &#x1f504;三、方案實現詳解 ??3.1 配置解密入口&#xff1a;EnvironmentPostProcessor3.2 通用解密工具類&#xff1a;EncryptionTool 四、快速…

OpenCV CUDA模塊特征檢測------角點檢測的接口createMinEigenValCorner()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數創建一個 基于最小特征值&#xff08;Minimum Eigenvalue&#xff09;的角點響應計算對象&#xff0c;這是另一種經典的角點檢測方法&…

性能優化 - 理論篇:CPU、內存、I/O診斷手段

文章目錄 Pre引言1. CPU 性能瓶頸1.1 top 命令 —— 多維度 CPU 使用率指標1.2 負載&#xff08;load&#xff09;——任務排隊情況1.3 vmstat 命令 —— CPU 繁忙與等待 2. 內存性能瓶頸2.1 操作系統層面的內存分布2.2 top 命令 —— VIRT / RES / SHR 三個關鍵列2.3 CPU 緩存…

GPIO的內部結構與功能解析

一、GPIO總體結構 總體構成 1.APB2(外設總線) APB2總線是微控制器內部連接CPU與外設&#xff08;如GPIO&#xff09;的總線&#xff0c;負責CPU對GPIO寄存器的讀寫訪問&#xff0c;支持低速外設通信 2.寄存器 控制GPIO的配置&#xff08;輸入/輸出模式、上拉/下拉等&#x…

汽車總線分析總結(CAN、LIN、FlexRay、MOST、車載以太網)

目錄 一、汽車總線技術概述 二、主流汽車總線技術對比分析 1. CAN總線&#xff08;Controller Area Network&#xff09; 2. LIN總線&#xff08;Local Interconnect Network&#xff09; 3. FlexRay總線 4. MOST總線&#xff08;Media Oriented Systems Transport&#x…

WordPress 6.5版本帶來的新功能

WordPress 6.5正式上線了&#xff01;WordPress團隊再一次為我們帶來了許多新的改進。在全球開發者的共同努力下&#xff0c;WordPress推出了許多新的功能&#xff0c;本文將對其進行詳細總結。 Hostease的虛擬主機現已支持一鍵安裝最新版本的WordPress。對于想要體驗WordPres…

【vue+ts】找不到模塊“./App.vue”或其相應的類型聲明

報錯&#xff1a;找不到模塊“./App.vue”或其相應的類型聲明。 原因&#xff1a;typescript只能理解.ts文件&#xff0c;無法理解.vue文件。 解決&#xff1a;在src/env.d.ts下添加&#xff1a; /// <reference types"vite/client" /> // 三斜線引用告訴編譯…

Nginx+Tomcat 負載均衡群集

目錄 一&#xff0c;部署Tomcat 1&#xff0c;案例概述 2&#xff0c;案例前置知識點 &#xff08;1&#xff09;Tomcat簡介 &#xff08;2&#xff09;應用場景 3&#xff0c;案例實施 3.1&#xff0c;實施準備 &#xff08;1&#xff09;關閉firewalld防火墻 &#…

Spring Boot Actuator未授權訪問漏洞修復

方案1&#xff1a;在網關的配置文件里增加以下配置 management:endpoints:web:exposure:include: []enabled-by-default: falseendpoint:health:show-details: ALWAYS 方案二&#xff1a;直接在nginx配置攔截actuator相關接口 location /actuator { return 403; …