チルダとキャレットの意味
HEADあるいは@は現在のブランチにおける最新のコミットを表す。~は親コミット、あるいは数字を付けた場合には指定した世代だけ前のコミットを表す。^は数字なしの場合は~と同じく親コミットを指すが、数字を付けた場合は幾つか存在する親コミットの何番目かを指定する。
マージせずに直線的な履歴の場合にはキャレット ^ を使うことはなく、通常前の世代のコミットはチルダ ~ で指定すればよい。
ヘッド
@ は 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^^
ファストフォワードではないマージコミットの場合は、親コミットが2つ存在する。
親コミットが2つ存在する場合に、2番目のコミット (merge コマンドで指定した方のコミット) からの変更を表示する。
$ git diff HEAD^2
参考:
チルダ (~) とキャレット (^) の違い | Tech 控え帳