【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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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; …