git reset --hard HEAD~1 を実行すると何が失われる?
正答
- 直前のコミットと、作業ツリーの未コミット変更
- 直前のコミットだけ。作業ツリーの変更は残る
- 作業ツリーの変更だけ。コミットは残る
- 何も失われず、HEAD の表示が変わるだけ
解説
--hard は HEAD を 1 つ前に動かし、ステージングと作業ツリーもその状態に強制的に合わせる。直前のコミットの内容だけでなく、まだコミットしていない編集もすべて消え、こちらは reflog でも復元できない。コミットは取り消しつつ変更を作業ツリーに戻したいなら --mixed(既定)、ステージに残したいなら --soft を使う。実行前に git status で未コミット変更が無いことを確認する習慣をつける。
参考: git-scm.com
この問題を含む Git のテストを制限時間つきで解く
Gitクイズへ