【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 --staged
或 git 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 版本控制流程中的两个重要环节。工作区是开发者进行代码编辑和修改的地方,而暂存区则是用于临时保存即将被提交到版本库的更改的区域。 通过合理地使用这两个区域,开发者可以更加精细地控制代码的提交过程,确保版本库中的代码始终保持整洁和有序。
相关文章:

【Git】View Submitted Updates——diff、show、log
在 Git 中查看更新的内容(即工作区、暂存区或提交之间的差异)是日常开发中的常见操作。以下是常用的命令和场景说明: 文章目录 1、查看工作区与暂存区的差异2、查看提交历史中的差异3、查看工作区与最新提交的差异4、查看两个提交之间的差异5…...

deepseek原理和项目实战笔记2 -- deepseek核心架构
混合专家(MoE) 混合专家(Mixture of Experts, MoE) 是一种机器学习模型架构,其核心思想是通过组合多个“专家”子模型(通常为小型神经网络)来处理不同输入,从而提高模型的容…...

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

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

华为OD机试真题——生成哈夫曼树(2025B卷:100分)Java/python/JavaScript/C/C++/GO六种最佳实现
2025 B卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《生成…...
react与vue的渲染原理
vue:响应式驱动模板编译 (1)模板编译 将模板(.vue 文件或 HTML 模板)编译为 渲染函数(Render Function); (2)响应式依赖收集 初始化时,通过 Ob…...
我提出结构学习的思路,意图用结构学习代替机器学习
我提出结构学习的思路,意图用结构学习代替机器学习 1.机器学习的本质和缺点 机器学习的规律是设计算法、用数据训练算法、让算法学会产生正确的数据回答问题,其缺点在于,需要大规模训练数据和巨大算力还其次,机器学习不能产生智…...
Outbox模式:确保微服务间数据可靠交换的设计方案
https://debezium.io/blog/2019/02/19/reliable-microservices-data-exchange-with-the-outbox-pattern/ Outbox模式是一种在微服务架构中确保数据更改和消息/事件发布之间可靠性的设计模式。它解决了在更新数据库和发送消息这两个独立操作中可能出现的不一致问题(…...
数据可视化的定义和类型
数据可视化是一种将数据转换为图形或视觉表示的方法。想象一下,你面前有一堆数字和表格,看着这些,可能会让人头大。数据可视化就像是给这些枯燥的数字画上一幅画。它用图表、地图和各种有趣的图形,帮我们把难懂的数字变得容易看懂…...
sqlite-vec:谁说SQLite不是向量数据库?
sqlite-vec 是一个 SQLite 向量搜索插件,具有以零依赖、轻量级、跨平台和高效 KNN 搜索等优势,是本地化向量检索(例如 RAG)、轻量级 AI 应用以及边缘计算等场景的理想工具。 sqlite-vec 使用纯 C 语言实现,零外部依赖…...

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

R3GAN训练自己的数据集
简介 简介:这篇论文挑战了"GANs难以训练"的广泛观点,通过提出一个更稳定的损失函数和现代化的网络架构,构建了一个简洁而高效的GAN基线模型R3GAN。作者证明了通过合适的理论基础和架构设计,GANs可以稳定训练并达到优异…...
MATLAB实战:Arduino硬件交互项目方案
以下是一个使用MATLAB与Arduino进行硬件交互的项目方案,涵盖传感器数据采集和执行器控制。本方案使用MATLAB的Arduino硬件支持包,无需额外编写Arduino固件。 系统组成 硬件: Arduino Uno 温度传感器(如LM35) 光敏电…...
bert扩充或者缩小词表
在BERT模型中添加自己的词汇(pytorch版) - 知乎 输入 1. 扩充词表 替换bert词表中的【unused】 2. 缩小词表 因为要使用预训练的模型,词id不能变,词向量矩阵大小不变 要做的是将减少的那一部分词全部对应为unk,即可…...
什么是 TOML?
🛠 Rust 配置文件实战:TOML 语法详解与结构体映射( 在 Rust 中,Cargo.toml 是每个项目的心脏。它不仅定义了项目的名称、版本和依赖项,还使用了一种轻巧易读的配置语言:TOML。 本文将深入解析 TOML 的语法…...
git怎么合并两个分支
git怎么合并分支代码 注意: 第一步你得把当前分支合到远程分支去才能有下面的操作 另外我是将develop分支代码合并到release分支去 git 命令 查看本地所有分支 git branch切换分支 例如切换到release分支 git checkout release拉取代码 git pull up release 合并分支 …...
1.文件操作相关的库
一、filesystem(C17) 和 fstream 1.std::filesystem::path - cppreference.cn - C参考手册 std::filesystem::path 表示路径 构造函数: path( string_type&& source, format fmt auto_format ); 可以用string进行构造,也可以用string进行隐式类…...
Pytorch中一些重要的经典操作和简单讲解
Pytorch中一些重要的经典操作和简单讲解: 形状变换操作 reshape() / view() import torchx torch.randn(2, 3, 4) print(f"原始形状: {x.shape}")# reshape可以处理非连续张量 y x.reshape(6, 4) print(f"reshape后: {y.shape}")# view要求…...

【容器docker】启动容器kibana报错:“message“:“Error: Cannot find module ‘./logs‘
说明: 1、服务器数据盘挂了,然后将以前的数据用rsync拷贝过去,启动容器kibana服务,报错信息如下图所示: 2、可能是拷贝docker文件夹,有些文件没有拷贝过去,导致无论是给文件夹授权用户kibana或者…...
基于bp神经网络的adp算法
基于BP神经网络的ADP(自适应动态规划)小程序的MATLAB实现示例。这个小程序包含Actor网络和Critic网络,用于解决优化问题。 MATLAB代码示例 % 基于BP神经网络的ADP小程序 % 包含Actor网络和Critic网络% 定义网络结构 inputSize 2; % 输入层…...

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修改 启动后,docker查看启动成功 spring boot集成milvus 参考了这篇文章 Spring AI开发RAG示例,理解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…...
maven项目编译时复制xml到classes目录方案
maven项目编译时复制xml到classes目录方案 <resources><resource><!-- xml放在java目录下 --><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources…...

通过阿里云服务发送邮件
通过阿里云服务发送邮件 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 方法:Vad-R13.1 从感知到认知的思维链(Perception-to-Cognition Chain-of-Thought)3.2 数据集:Vad-Reasoning3.3 A…...

黑马Java面试笔记之MySQL篇(事务)
一. 事务的特性 事务的特性是什么?可以详细说一下吗? 事务是一组操作的集合,他是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失…...

群辉(synology)NAS老机器连接出现网页端可以进入,但是本地访问输入一样的账号密码是出现错误时解决方案
群辉(synology)NAS老机器连接出现网页端可以进入,但是本地访问输入一样的账号密码是出现错误时解决方案 老机器 装的win7 系统 登入后端网页端的时候正常,但是本地访问登入时输入登入网页端一样的密码时候出现问题解决方案 1.登…...
C++多重继承详解与实战解析
#include <iostream> using namespace std; //基类,父类 class ClassA { public:void displayA() {std::cout << "Displaying ClassA" << std::endl;}void testFunc(){std::cout << "testFunc ClassA" << std::e…...

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