危険察知○×難易度 標準

状況

作業者が「いったん全部戻します。消えても 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

gitrestorereflog

この問題を含む 危険察知 のテストを制限時間つきで解く

危険察知クイズへ