查看 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
总结: