git diff 四种比较方式

本文深入解析Git中的差分命令,包括git diff、git diff commit、git diff --cached commit及git diff commit1 commit2的使用场景与实践。通过实例演示如何在工作目录、索引与提交间比较差异,为版本控制提供有力支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://blog.youkuaiyun.com/asheandwine/article/details/78982919

工作场景
在用git进行版本控制的时候,通常会有这样的需求: 
1.我想知道我的工作目录中都发生了那些变化,以辅助我的commit操作。 
2.当要真正进行提交时,我需要清楚将要提交的内容和版本库的内容有哪些不同,这样的提交是正确的吗。 
3.在线上代码出现问题的时,明确的知道原来有个版本的代码是好用的,除了进行线上紧急回滚外,我需要知道到底进行了什么操作引起了失败。 
除此之外可能还会有其他的需求吧。

先上理论
那git给我们提供了哪些方式,是我们对自己的修改或者变更了如指掌呢。 
1. git diff 
显示工作目录和索引之间的差异。 
2. git diff commit 
显示工作目录和指定提交之间的差异。比较常见的用法是比较工作目录于HEAD指向的提交之间的差异,这时需要用HEAD替代commit。 
3. git diff –cached commit 
比较索引(stage)和给定提交之间的差异,其中commit可以省略,如果省略,默认比较的是索引与HEAD指向的提交间的差异。 
4. git diff commit1 commit2 
比较两个提交之间的差异。该命令会忽略工作目录和索引之中的内容,直接比较两个提交之间的变化。

有说有练
第一步:先初始化一个git仓库,并作两次提交,且在工作目录中进行一些变更:
mkdir git-diff
cd git-diff 
git init
echo "Hello git diff" >> readme.txt
git add .
git commit -m 'first commit'
echo "hello next commit" >> readme.txt 
git add .
git commit -m 'second commit'
echo "I'm in the stage" >> readme.txt 
git add .
echo "I'm in the workplace" >> readme.txt 

第二步,开始操作
bingo 初始化工作做好了,来看具体的操作吧: 
1.git diff 实例中显示,工作目录比stage中添加了一行I’m in the workplace

git diff

diff --git a/readme.txt b/readme.txt
index cecb589..6f877a8 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,3 +1,4 @@
 Hello git diff
 hello next commit
 I'm in the stage
+I'm in the workplace

2.git diff commit 实例中对当前工作区和HEAD指向的提交进行比较,显示工作区比HEAD指向的提交新添加了两行。

git diff HEAD

diff --git a/readme.txt b/readme.txt
index 56e1883..6f877a8 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,4 @@
 Hello git diff
 hello next commit
+I'm in the stage
+I'm in the workplace

3.git diff –cached commit 实例中,用stage中的文件与HEAD指向中的版本进行了比较,很明显,我在提交提交之后想readme.txt中添加了一行I’m in stage并将其添加到了stage中。

git diff --cached HEAD

diff --git a/readme.txt b/readme.txt
index 56e1883..cecb589 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
 Hello git diff
 hello next commit
+I'm in the stage

4.git diff commit1 commit2 比较了HEAD与其上一次提交之间的差异,通过观察我们初始化的操作,可以发现,这是完全正确的显示。

git diff HEAD HEAD^

diff --git a/readme.txt b/readme.txt
index 56e1883..8adabc7 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1 @@
 Hello git diff
-hello next commit
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值