次のgitコマンドの違いは何ですか?
git diff HEAD
git diff HEAD^
git diff --cached
または同義語git diff --staged
git diff
git diff HEAD
-前回のコミット以降に何が変更されたかを示します。git diff HEAD^
-コミット以降に何が変更されたかを示しますbefore最新のコミット。git diff --cached
-git add
を介してインデックスに追加されたが、まだコミットされていないものを表示します。git diff
-git add
を使用して、変更されたもののまだインデックスに追加されていないものを表示します。次のようになります。
Working
Directory <----+--------+------+
| | | |
| | | |
V | | |
"git add" | | |
| diff | |
| | | |
V | | |
Index <----+ diff HEAD |
| | | |
| | | |
V | | |
"git commit" | | |
| diff --cached | |
| diff --staged | |
V | | |
HEAD <----+--------+ |
| |
| diff HEAD^
V |
previous "git commit" |
| |
| |
V |
HEAD^ <--------------------+
Gitコミュニティブック から:
git diff
次のコミットのためにまだステージングされていない作業ディレクトリの変更が表示されます。
git diff --cached
インデックスと最後のコミットの違いを表示します。 「-a」オプションなしで「git commit」を実行した場合のコミット内容。
git diff HEAD
最後のコミット以降の作業ディレクトリの変更を示します。 「git commit -a」を実行した場合のコミット内容。
git diff HEAD
:HEADと作業ディレクトリの違い。git diff HEAD^
:HEAD)の直接の祖先と作業ディレクトリとの差分。git diff --cached
または同義語git diff --staged
:HEADとインデックスの違い。git diff
:インデックスと作業ディレクトリの差分。これらのコマンドを覚える簡単な方法を次に示します。
git diff
のソースは作業ディレクトリと見なされ、そのターゲットはインデックスです。--cached
フラグは、ソースをインデックスに変更します。引数を追加しても、ターゲットは必ずしも変更されません。しかし、便宜上、何も指定されていない場合、ターゲットは最後のコミットになります。自分の好みに合わせて楽しんでください:)
HEAD
は、ツリー内の現在のHEAD
ポインター、HEAD^
はHEAD
の前のコミットです。 --cached
わかりません。--cached
は、行ったがインデックスに追加していない変更を表示します。
Kernal.orgの git tutorial は非常に読みやすいです。