git の ORIG_HEAD について

gitの「ORIG_HEAD」は「HEAD@{1}」の別名かと思っていたが実は違っていたのでメモ。



ORIG_HEADは、コミットオブジェクトを書き込むコマンドの実行前にHEADだったコミットIDの別名。
大抵の場合は git reflog で見ることができる「HEADの変更履歴で、1つ前にHEADだったコミット」=「HEAD@{1}」と等しい。
ただし git stash など、HEADを変化させないがコミットオブジェクトは書き込むコマンドは、ORIG_HEADを変化させるて、HEAD@{1}は変化させない。このようなコマンド実行後はORIG_HEADとHEAD@{1}が違うコミットIDを指すことがあり得る。