git diff命令

git diff命令用於顯示提交和工作樹等之間的更改。此命令比較的是工作目錄中當前文件和暫存區域快照之間的差異,也就是修改之後還沒有暫存起來的變化內容。

簡介

git diff [options] [<commit>] [--] [<path>…​]
git diff [options] --cached [<commit>] [--] [<path>…​]
git diff [options] <commit> <commit> [--] [<path>…​]
git diff [options] <blob> <blob>
git diff [options] [--no-index] [--] <path> <path>

描述

在工作樹和索引或樹之間顯示更改,索引和樹之間的更改,兩個樹之間的更改,兩個blob對象之間的更改或兩個文件在磁盤上的更改。

爲了防止異常情況發生,請注意,上述描述中的所有<commit>除了使用「..」符號的最後兩種形式之外,都可以是任何<tree>

示例

以下是一些示例 -

git diff <file> # 比較當前文件和暫存區文件差異 git diff

git diff <id1><id1><id2> # 比較兩次提交之間的差異

git diff <branch1> <branch2> # 在兩個分支之間比較
git diff --staged # 比較暫存區和版本庫差異

git diff --cached # 比較暫存區和版本庫差異

git diff --stat # 僅僅比較統計信息

1. 檢查工作樹的幾種方式

$ git diff            #(1)
$ git diff --cached   #(2)
$ git diff HEAD       #(3)
  1. 工作樹中的更改尚未分段進行下一次提交。
  2. 索引和最後一次提交之間的變化; 查看已經git add ,但沒有git commit 的改動。
  3. 自上次提交以來工作樹中的更改;如果運行「git commit -a」,查看將會提交什麼。

查看尚未暫存的文件更新了哪些部分,不加參數直接輸入 -

$ git diff

此命令比較的是工作目錄(Working tree)和暫存區域快照(index)之間的差異
也就是修改之後還沒有暫存起來的變化內容。

查看已經暫存起來的文件(staged)和上次提交時的快照之間(HEAD)的差異 -

$ git diff --cached
$ git diff --staged

顯示的是下一次提交時會提交到HEAD的內容(不帶-a情況下)

顯示工作版本(Working tree)和HEAD的差別

$ git diff HEAD

直接將兩個分支上最新的提交做diff

$ git diff topic master
$ #或 
$ git diff topic..master

輸出自topicmaster分別開發以來,master分支上的變更。

$ git diff topic...master

查看簡單的diff結果,可以加上--stat參數

$ git diff --stat

查看當前目錄和另外一個分支(test)的差別

$ git diff test

顯示當前目錄和另一個叫’test‘分支的差別

$ git diff HEAD -- ./lib

顯示當前目錄下的lib目錄和上次提交之間的差別(更準確的說是在當前分支下)
比較上次提交和上上次提交

$ git diff HEAD^ HEAD

比較兩個歷史版本之間的差異

$ git diff SHA1 SHA2

提示:SHA1,SHA2是類似 COMMIT ID 的32位長度的值。