查看 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
總結: