状況
作業者が「いったん全部戻します。消えても reflog から戻せるので」と言っている。
まだ git add していない変更を git checkout . で捨てると、あとから git reflog を使っても復元できない。
正答
○ 正しい
解説
正しい。reflog が記録するのは、ブランチや HEAD が指していたコミットの履歴。git checkout . や git restore . は作業ツリーのファイルをインデックスの内容で上書きするだけで、まだ git add していない変更はどのコミットにも Git のオブジェクトにも含まれていないため、reflog からは戻せない。「reflog があれば何でも戻せる」はよくある誤解で、戻せるのは一度コミットした内容に限られる(git add 済みなら git fsck で拾える可能性はあるが、当てにはできない)。捨てる前に git diff で何が消えるかを見て、迷ったら git stash で退避する。
参考: git-scm.com
この問題を含む 危険察知 のテストを制限時間つきで解く
危険察知クイズへ