Git 系列:掌握Git的diff命令:从工作目录到提交区的差异对比

 

多种情形下的文件对比

我们知道Git 中文件,除了被跟踪以后,文件都处于被staged(暂存区),只要文件被修改或者移动,文件最后都需要再次被add增加到staged(暂存区)。

情形一:对比被修改文件与暂存区的文件之间的差异

git diff

对比工作目录中当前文件和暂存区域快照之间的差异。 也就是修改之后还没有暂存起来的变化内容。

第一步修改文件(A.c已经处于暂存区中了)

echo "add new line A.c" >> A.c 
git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

      modified:   A.c
root@osboxes:/home/user/my_project# git diff     ##对比正在修改的文件与暂存区中原始的文件
diff --git a/A.c b/A.c
index c85f73e..7cf42d9 100644
--- a/A.c
+++ b/A.c
@@ -1 +1,2 @@
this is new A.c file

git diff --staged 命令将比对已暂存文件与最后一次提交的文件差异

root@osboxes:/home/user/my_project# git add A.c  #添加到暂存区中,这样暂存区就修改了
root@osboxes:/home/user/my_project# git diff --staged   ##对比git暂存区中的数据与最后一次提交的文件的区别
diff --git a/A.c b/A.c
index c85f73e..7cf42d9 100644
--- a/A.c
+++ b/A.c
@@ -1 +1,2 @@  
this is new A.c file
+add new line A.c

如何看懂git diff 的输出结果

知己参考即可:

从实用角度出发看懂和使用diff

diff的合并格式的详细说明

--- a/A.c ## 变动前文件
+++ b/A.c ## 变动后文件
@@ -1 +1,2 @@
this is new A.c file
+add new line A.c

减号表示第一个文件(即f1),"1"表示第1行,"2"表示连续2行。合在一起,就表示下面是第一个文件从第1行开始的连续7行。同样的,"+1,2"表示变动后,成为第二个文件从第1行开始的连续2行。

 this is new A.c file
+add new line A.c

每一行最前面的标志位,空表示无变动,减号表示第一个文件删除的行,加号表示第二个文件新增的行。

总结

对比目前的文件和暂存区的变化,选项加具体的文件名称

git diff 

对比暂存区和提交区域的不同,选项加具体的文件名称

git diff  --staged

git diff 默认使用的是diff 的合并格式

diff -u file1 file2 
当然了,对比不仅仅包含这些区域,同样包含很多中对比方式,比如:工作区与特定提交分支的文件对比。
对于这种高级用法,我们可以作为补充,但是不推荐学习。
为什么不推荐学习
掌握Git 用法,不是要学习每一个点,而是掌握关键的学习点。

发表评论

后一页 前一页