試した環境
- git version 2.37.1.windows.1
本題
git diff HEAD^
とgit diff HEAD^..HEAD
では未コミットの変更箇所があるときに挙動が違います。
以下のような内容のテキストファイルを用意します。
1st 2nd commit 3rd unstage
1行目を書いてgit add -A
およびgit commit
し、2行目を追記してgit add -A
およびgit commit
し、3行目を書いて commit してない状態にします。
この時git diff HEAD^
をすると、最後にコミットした変更点とコミットしていない変更点に変更箇所のマークがつきます。
$ git diff HEAD^ diff --git a/file.txt b/file.txt index 2a5d015..6dac622 100644 --- a/file.txt +++ b/file.txt @@ -1 +1,3 @@ 1st +2nd commit +3rd unstage
git diff HEAD^..HEAD
をすると、最後にコミットした変更点のみに変更箇所のマークがつきます。
$ git diff HEAD^..HEAD diff --git a/file.txt b/file.txt index 2a5d015..eb27d5c 100644 --- a/file.txt +++ b/file.txt @@ -1 +1,2 @@ 1st +2nd commit
上記は unstaged の結果ですが staged も同じ結果です。
file2.txt を追加してgit add file2.txt
した状態でgit diff HEAD^
をすると、以下のようにfile2.txtの変更点に追加で変更箇所のマークがつきます。
$ git diff HEAD^ diff --git a/file.txt b/file.txt index 2a5d015..6dac622 100644 --- a/file.txt +++ b/file.txt @@ -1 +1,3 @@ 1st +2nd commit +3rd unstage diff --git a/file2.txt b/file2.txt new file mode 100644 index 0000000..5c1789c --- /dev/null +++ b/file2.txt @@ -0,0 +1 @@ +3rd staged