git pull拉取
git pull對於拉下來的修改文件自動對其進行git add /rm 及git commit 操作。所以拉下來的文件有那些修改,查看的方式可把它們歸結於上一次提交的比較。
git diff HEAD 顯示工作目錄與git倉庫之間的差異,
而
git diff HEAD^ 則顯示上一次提交之前工作目錄與git倉庫之間的差異。所以我們在git pull后,可以通過git diff HEAD^ 來查看拉下來的文件有那些具體的修改。
git diff 顯示工作目錄與索引文件之間的差異
git diff –cached顯示索引文件與git倉庫之間的差異
git diff HEAD 顯示工作目錄與git倉庫之間的差異
Git查看版本改動—— git diff
HEAD 表示當前版本,也就是最新的提交。上一個版本就是 HEAD^ ,上上一個版本就是 HEAD^^ ,
往上100個版本寫100個 “ ^ ” 比較容易數不過來,所以寫成 HEAD~100 。HEAD~2 相當於 HEAD^^ 。
我們在 Git 版本回退里 可以利用 HEAD 關鍵字進行指定版本的回退。
那么對於 $ git diff HEAD -- <filename> 命令是不是也能操作不同的情況?
自己試了試一個例子:
命令 $ git diff 查看對比兩次文件內容具體修改了什么。
命令 $ git diff HEAD -- <filename> (“--”前后有空格),可以查看工作區和版本庫里面最新版本的區別。
步驟:
- 第一步:在Git里添加test.txt。最初內容是數字“1”。並commit 提交到版本庫里。
- 第二步:增加數字“2”,並提交。
- 第三步:增加數字“3”,並提交。
- 第四步:增加數字“4”,並提交。
- 第五步:增加數字“5”,並提交。
最后文件內容為:

假設倉庫里已提交的有五個版本,依次提交的是A、B、C、D、E 。
- 在都已提交的版本庫中:
執行 $ git diff <filename> 命令,命令行窗口不會輸出文件的改動信息。
執行 $ git diff HEAD -- <filename> 命令同樣也不會輸出文件的改動信息。因為當前工作區未做改動。
執行 $ git diff HEAD^ -- <filename> 命令則可以查看最近兩次提交版本的區別(版本E和版本D的差別——增加數字“5”)
執行 $ git diff HEAD^^ -- <filename> 命令則可以查看最近一次提交和最近一次提交的上上個版本的區別(版本E和版本C的差別——增加數字“4”和“5”)
執行 $ git diff HEAD^^^ -- <filename> 命令則可以查看版本E和版本B的差別——增加數字“3”,“4”和“5”。
執行 $ git diff HEAD~4 -- <filename> 命令則可以查看版本E和版本A的差別——增加數字“2”,“3”,“4”和“5”。等同於HEAD^^^^
現在增加第六步:再增加數字“6”。分三種情況,還未執行 add、add 后還未commit、add 並commit(版本F)。
在工作區做新的改動后,還未提交:
- 第一種情況:修改文件內容后還未執行 add 命令
此時執行 $ git diff <filename> 命令,可以查看對比最近一次提交的版本,剛剛在工作區修改了什么內容(工作區和版本E的差別——增加數字“6”)。
同樣執行 $ git diff HEAD -- <filename> 命令,也可以查看對比最近一次提交的版本,剛剛工作區修改了什么內容——增加數字“6”。
如果執行 $ git diff HEAD^ -- <filename> 則會顯示工作區與倉庫里最近一次提交的上一次提交的版本的改動信息(工作區和版本D的差別——增加數字“5”和“6”)。
如果執行 $ git diff HEAD^^ -- <filename> 則會顯示工作區與倉庫里最近一次提交的上兩次提交的版本的改動信息(工作區和版本C的差別——增加數字“4”,“5”和“6”)。
依次類推。。
- 第二種情況:修改文件內容后繼續執行了 add 命令
此時執行 $ git diff <filename> 命令。命令行窗口不會輸出文件的改動信息。
而執行 $ git diff HEAD -- <filename> 命令則可以查到工作區與最近一次提交的版本庫里面的區別(工作區和版本E的差別——增加數字“6”)。
以此類推。
- 第三種情況:修改文件內容后繼續執行了 add 命令后,並把文件commit 到倉庫
此時執行$ git diff <filename> 命令和 $ git diff HEAD -- <filename> 命令,窗口都不會輸出文件的改動信息。
而執行 $ git diff HEAD^ -- <filename> 命令則可以查看最近兩次提交版本的區別,以此類推。即該情況同上述在都已提交的情況下相同,不做贅述。
總結: 對於 $ git diff <filename> 、$ git diff HEAD -- <filename> 、 $ git diff HEAD^ -- <filename> (包括HEAD^^、HEAD^^^、以及以此類推 HAED~number)這三種命令,
在都已提交的版本庫中。如果想查看其中兩個提交都修改了哪些內容。可以使用 $ git diff HEAD^ -- <filename> 命令開始查看。以此類推。(即從 HEAD^ 開始便可以了,)
在工作區改動后,還未執行add命令的時候,命令 $ git diff <filename> 和 命令 $ git diff HEAD -- <filename> 兩個都可以查看當前工作區和最近一次提交的版本之間的差別。以此類推 HEAD^^、HEAD^^^ 等可以查看當前工作區與之前指定某版本的差別。所以當我們在工作區修改過還沒有添加都暫緩區的時候可以用這些命令查看剛剛在工作區改動了哪里。
而工作區改動后並且 執行add 命令后但還未提交, $ git diff <filename> 將不能再進行比較。但可以繼續用關鍵詞HEAD、HEAD^ 等進行比較。以此類推。
