次の git コマンドの違いは何ですか?
git diff HEAD
git diff HEAD^
git diff --cached
または同義語git diff --staged
git diff
git diff HEAD
- 最後のコミット以降に何が変更されたかを表示します。git diff HEAD^
-最新のコミットの前のコミット以降に何が変更されたかを示します。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 diff
次のコミットのためにまだステージングされていない作業ディレクトリの変更が表示されます。
git diff --cached
インデックスと最後のコミットの違いが表示されます。「-a」オプションなしで「gitcommit」を実行した場合にコミットする内容。
git diff HEAD
最後のコミット以降の作業ディレクトリの変更を表示します。「gitcommit-a」を実行した場合にコミットする内容。
git diff HEAD
: HEAD と作業ディレクトリの違い。git diff HEAD^
: HEAD の直接の祖先と作業ディレクトリの違い。git diff --cached
または同義語git diff --staged
: HEAD とインデックスの違い。git diff
: インデックスと作業ディレクトリの違い。HEAD
はツリー内の現在のHEAD
ポインタ、HEAD^
は前のコミットHEAD
です。--cached
よくわかりません。--cached
行ったがインデックスに追加していない変更が表示されます。
kernal.orgのgit チュートリアルは非常に参考になります。