チルダとキャレットの意味
@ は HEAD を表す(HEAD コミットの変更を表示する)
$ git show @
これは次のコマンドと同じ
$ git show HEAD
チルダ (~) は世代が前のコミットを表す
1世代前のコミットからの変更を表示する
$ git diff HEAD~
2世代前のコミットからの変更を表示する
$ git diff HEAD~2
次のコマンドでも同じ
$ git diff HEAD~~
キャレット (^) は親コミットを表す
親コミットからの変更を表示する(HEAD~ もしくは HEAD~1 の指定と同じ)
$ git diff HEAD^
親の親コミットからの変更を表示する(HEAD~~ もしくは HEAD~2 の指定と同じ)
$ git diff HEAD^^
merge したコミット (no-ff) の場合は親コミットが2つ存在する
2つある親コミットの2番目のコミット (merge コマンドで指定した方) からの変更を表示する
$ git diff HEAD^2
参考: