git 命令 git diff 查看 Git 区域文件的具体改动

 

 

 查看 Git 区域文件的具体改动 git diff

  git status 只能让我们知道文件在 Git 区域内的改动状态,但如果我们想查看某个文件内具体改了什么(也可以理解为在不同 Git 区域中的差异),此时需要用 git diff 命令。

  对于 b 文件,由于是新增的文件,其只存在于工作区,且处于 Untracked 状态,Git 认为无论是哪两个 Git 区域之间的比对都没有意义,得到的结果是没有区别。

  而对于 a文件,由于已经被提交到仓库了,处于 Git 管理中,所以这个文件同时存在于三个 Git 空间(工作区,暂存区,仓库),我们在工作区内对其进行了文件改动,无论是比对工作区 vs 暂存区或者工作区 vs 仓库,得到的结果应该都是 a 文件里的具体变化内容。而如果比对暂存区 vs 仓库,得到的结果也应该是没有区别。


git diff 用在查看文件内容变化

查看文件当前变动(工作区 vs 暂存区)git diff

 

工作区做了改动

// 改动 a.txt 文件后可看到文件的具体变化
[root@ci-node1 git_test]# echo "test">>a

看看git stauts,文件被修改了,这个文件被git仓库管理

[root@ci-node1 git_test]# git status
On branch master
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

no changes added to commit (use "git add" and/or "git commit -a")

看看文件里面改了什么 git status无法看到,使用git diff

对比工作区和暂存区

[root@ci-node1 git_test]# git diff a
diff --git a/a b/a
index e69de29..9daeafb 100644
--- a/a
+++ b/a
@@ -0,0 +1 @@
+test

暂存区和工作区的a做了哪些改动,加了test

 

 

//将 a 文件的变动暂存后,查看变化
[root@ci-node1 git_test]# git add a


[root@ci-node1 git_test]# git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   a

//对比工作区与暂存区,无变化,git diff 没有输出
[root@ci-node1 git_test]# git diff a

// git add 后工作区和暂存区内容一致了,对比,

 

查看文件当前变动(工作区 vs 暂存区)git diff –cached

这时候对比暂存区与本地仓库,可以看到具体变化

//对比暂存区与本地仓库,可以看到具体变化
[root@ci-node1 git_test]# git diff --cached a
diff --git a/a b/a
index e69de29..9daeafb 100644
--- a/a
+++ b/a
@@ -0,0 +1 @@
+test

这时候执行git commit

[root@ci-node1 git_test]# git commit -m "modify a"
[master af5856a] modify a
 1 file changed, 1 insertion(+)
// 这时候再执行git diff --cached ,没有输出
[root@ci-node1 git_test]# git diff --cached a

暂存区和本地仓库一样了

 

再做个验证

// 工作区是干净的,三个区域 工作区、暂存区、本地仓库内容是一致的
[root@ci-node1 git_test]# git status
On branch master
nothing to commit, working tree clean

 

改动 a 文件后,工作区改动了,再看变化
//改动 a 文件后,工作区改动了,再看变化
[root@ci-node1 git_test]# echo "bbb">a

现在工作区和暂存区不一致的,但暂存区和本地仓库是一致的

// 现在工作区和暂存区不一致的,但暂存区和本地仓库是一致的
[root@ci-node1 git_test]# git diff a
diff --git a/a b/a
index 9daeafb..f761ec1 100644
--- a/a
+++ b/a
@@ -1 +1 @@
-test
+bbb

 

没有输出,因为暂存区和本地仓库是一致的 
// 没有输出,因为暂存区和本地仓库是一致的 
[root@ci-node1 git_test]# git diff --cached a

 

 

 总结:

git diff 比较的是 工作区和暂存区

git diff --cached 比较的是 暂存区和本地仓库

posted @ 2019-12-01 18:49  minger_lcm  阅读(6152)  评论(0编辑  收藏  举报