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

news2025/6/5 8:19:16

在这里插入图片描述

在 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); do
    md5=$(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.coloradmin.cn/o/2397846.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

deepseek原理和项目实战笔记2 -- deepseek核心架构

混合专家&#xff08;MoE&#xff09; ​​混合专家&#xff08;Mixture of Experts, MoE&#xff09;​​ 是一种机器学习模型架构&#xff0c;其核心思想是通过组合多个“专家”子模型&#xff08;通常为小型神经网络&#xff09;来处理不同输入&#xff0c;从而提高模型的容…

在 MATLAB 2015a 中如何调用 Python

在 MATLAB 2015a 中调用 Python 可通过系统命令调用、.NET 交互层包装、MEX 接口间接桥接、环境变量配置四种方式&#xff0c;但因该版本对 Python 支持有限&#xff0c;主要依赖的是系统命令调用与间接脚本交互。其中&#xff0c;通过 system() 函数调用 Python 脚本是最简单且…

房屋租赁系统 Java+Vue.js+SpringBoot,包括房屋类型、房屋信息、预约看房、合同信息、房屋报修、房屋评价、房主管理模块

房屋租赁系统 JavaVue.jsSpringBoot&#xff0c;包括房屋类型、房屋信息、预约看房、合同信息、房屋报修、房屋评价、房主管理模块 百度云盘链接&#xff1a;https://pan.baidu.com/s/1KmwOFzN9qogyaLQei3b6qw 密码&#xff1a;l2yn 摘 要 社会的发展和科学技术的进步&#xf…

华为OD机试真题——生成哈夫曼树(2025B卷:100分)Java/python/JavaScript/C/C++/GO六种最佳实现

2025 B卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《生成…

Redis最佳实践——性能优化技巧之监控与告警详解

Redis 在电商应用的性能优化技巧之监控与告警全面详解 一、监控体系构建 1. 核心监控指标矩阵 指标类别关键指标计算方式/说明健康阈值&#xff08;参考值&#xff09;内存相关used_memoryINFO Memory 获取不超过 maxmemory 的 80%mem_fragmentation_ratio内存碎片率 used_m…

R3GAN训练自己的数据集

简介 简介&#xff1a;这篇论文挑战了"GANs难以训练"的广泛观点&#xff0c;通过提出一个更稳定的损失函数和现代化的网络架构&#xff0c;构建了一个简洁而高效的GAN基线模型R3GAN。作者证明了通过合适的理论基础和架构设计&#xff0c;GANs可以稳定训练并达到优异…

【容器docker】启动容器kibana报错:“message“:“Error: Cannot find module ‘./logs‘

说明&#xff1a; 1、服务器数据盘挂了&#xff0c;然后将以前的数据用rsync拷贝过去&#xff0c;启动容器kibana服务&#xff0c;报错信息如下图所示&#xff1a; 2、可能是拷贝docker文件夹&#xff0c;有些文件没有拷贝过去&#xff0c;导致无论是给文件夹授权用户kibana或者…

C#里与嵌入式系统W5500网络通讯(4)

怎么样修改W5500里的socket收发缓冲区呢? 需要进行下面的工作,首先要了解socket缓冲区的作用,接着了解缓冲区的硬件资源, 最后就是要了解自己的需求,比如自己需要哪个socket的收发送缓冲区多大。 硬件的寄存器为: 这是 W5500 数据手册中关于 Sn_RXBUF_SIZE(Socket n …

Spring boot集成milvus(spring ai)

服务器部署Milvus Run Milvus with Docker Compose (Linux) milvus版本可在docker-compose.yml中进行image修改 启动后&#xff0c;docker查看启动成功 spring boot集成milvus 参考了这篇文章 Spring AI开发RAG示例&#xff0c;理解RAG执行原理 但集成过程中遇到了一系列…

Visual Studio+SQL Server数据挖掘

这里写自定义目录标题 工具准备安装Visual studio 2017安装SQL Server安装SQL Server Management Studio安装analysis service SSMS连接sql serverVisual studio新建项目数据源数据源视图挖掘结构部署模型设置挖掘预测 部署易错点 工具准备 Visual studio 2017 analysis servi…

通过阿里云服务发送邮件

通过阿里云服务发送邮件 1. 整体描述2. 方案选择2.1 控制台发送2.2 API接口接入2.3 SMTP接口接入2.4 结论 3. 前期工作3.1 准备工作3.2 配置工作3.3 总结 4. 收费模式4.1 免费额度4.2 资源包4.3 按量付费 5. Demo开发5.1 选择SMTP服务器5.2 pom引用5.3 demo代码5.4 运行结果 6 …

Vad-R1:通过从感知到认知的思维链进行视频异常推理

文章目录 速览摘要1 引言2 相关工作视频异常检测与数据集视频多模态大语言模型具备推理能力的多模态大语言模型 3 方法&#xff1a;Vad-R13.1 从感知到认知的思维链&#xff08;Perception-to-Cognition Chain-of-Thought&#xff09;3.2 数据集&#xff1a;Vad-Reasoning3.3 A…

黑马Java面试笔记之MySQL篇(事务)

一. 事务的特性 事务的特性是什么&#xff1f;可以详细说一下吗&#xff1f; 事务是一组操作的集合&#xff0c;他是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失…

群辉(synology)NAS老机器连接出现网页端可以进入,但是本地访问输入一样的账号密码是出现错误时解决方案

群辉&#xff08;synology&#xff09;NAS老机器连接出现网页端可以进入&#xff0c;但是本地访问输入一样的账号密码是出现错误时解决方案 老机器 装的win7 系统 登入后端网页端的时候正常&#xff0c;但是本地访问登入时输入登入网页端一样的密码时候出现问题解决方案 1.登…

【深度学习】实验四 卷积神经网络CNN

实验四 卷积神经网络CNN 一、实验学时&#xff1a; 2学时 二、实验目的 掌握卷积神经网络CNN的基本结构&#xff1b;掌握数据预处理、模型构建、训练与调参&#xff1b;探索CNN在MNIST数据集中的性能表现&#xff1b; 三、实验内容 实现深度神经网络CNN。 四、主要实验步…

实现一个免费可用的文生图的MCP Server

概述 文生图模型为使用 Cloudflare Worker AI 部署 Flux 模型&#xff0c;是参照视频https://www.bilibili.com/video/BV1UbkcYcE24/?spm_id_from333.337.search-card.all.click&vd_source9ca2da6b1848bc903db417c336f9cb6b的复现Cursor MCP Server实现是参照文章https:/…

【手搓一个原生全局loading组件解决页面闪烁问题】

页面闪烁效果1 页面闪烁效果2 封装一个全局loading组件 class GlobalLoading extends HTMLElement {constructor() {super();this.attachShadow({ mode: open });}connectedCallback() {this.render();this.init();}render() {this.shadowRoot.innerHTML <style>.load…

CSS基础巩固-基础-选择

目录 CSS是如何工作的&#xff1f; 当浏览器遇到无法解析的CSS代码时 如何导入CSS样式&#xff1f; 改变元素的默认样式 选择 前缀符号&#xff08;后面会具体介绍&#xff09; 优先级 同时应用样式到多个类上 属性选择器 伪类 伪元素 关系选择器 后代选择器 子代…

一种在SQL Server中传递多行数据的方法

这是一种比较偷懒的方法&#xff0c;其实各种数据库对Json 支持的很好。sql server 、oracle都不错。所以可以直接传json declare 这是一个json varchar(max) set 这是一个json{"data":[{"code":"1","name":"啥1"},{"…

【Docker 从入门到实战全攻略(一):核心概念 + 命令详解 + 部署案例】

1. 是什么 Docker 是一个用于开发、部署和运行应用程序的开源平台&#xff0c;它使用 容器化技术 将应用及其依赖打包成独立的容器&#xff0c;确保应用在不同环境中一致运行。 2. Docker与虚拟机 2.1 Docker&#xff08;容器化&#xff09; 容器化是一种轻量级的虚拟化技术…