7

私は以前に異常な git の問題に遭遇し、その後解決しましたが、なぜそれが起こったのかについてはまだ興味があります。

現在作業中のブランチを誤って削除したときに問題が発生しました。通常、git はこれを許可しませんが、OSX では大文字と小文字が区別されないため、2 つのブランチ (1 つは という名前feature/ONE、もう1 つは という名前) があると考える状況に陥りましたfeature/one。これらは 2 つの別個のブランチ (主に Linux/大文字と小文字を区別するバックグラウンドから来ている) であり、feature/ONE に取り組んでいると考えて、feature/one を使用して削除しようとしましgit branch -Dた。

自分が行ったことにすぐに気付き、失われた作業を から取得しようとしたところgit reflog、エラーが発生しましfatal: bad default revision 'HEAD'た。を使用して通常の状態に戻そうとしましたがgit checkout -f develop、うまくいきました。しかし、git reflogこの後調べてみると、残念ながらcheckout: moving from feature/ONE to develop. 以前のアクションはログに表示されませんでした。

この種のシナリオを再現するためのいくつかの手順をまとめました (おそらく、これは大文字と小文字を区別しないファイルシステムでのみ可能です)。

mkdir test
cd test
git init
echo 'hi' > file1
git add file1
git commit -m 'test commit 1'
git checkout -b new-branch
echo 'test2' > file2
git add file2
git commit -m 'test commit 2'
git branch -D NEW-branch
git checkout -f master
git reflog

それ以来、 をチェックすることで失われたコミットを見つけることができましたgit-fsckが、私の質問は次のとおりです。

この一連のアクションで reflog が壊れたのはなぜですか? ブランチが削除されたとしても、reflog は HEAD ref の履歴をまだ知っているべきではありませんか?

4

2 に答える 2