期限切れの reflog エントリをテストする
このステップでは、Git が reflog をどのように管理し、エントリが最終的に期限切れになる仕組みについて学びます。デフォルトでは、Git は reflog エントリを一定期間保持します。到達可能なエントリ(ブランチまたはタグが指しているもの)は 90 日間保持され、到達不可能なエントリ(何からも指されていないもの)は 30 日間保持されます。これらの期間が過ぎると、Git のガベージコレクションプロセスによって削除される可能性があります。
この実験では時間の経過をシミュレートしてエントリが自然に期限切れになるのを見ることはできませんが、特定のオプションを使用して Git のガベージコレクションを手動でトリガーし、古い reflog エントリを削除することができます。
重要: このコマンドを実行すると、設定された有効期限に基づいて古い reflog エントリが削除されます。実際のシナリオでは、古い reflog エントリをクリーンアップする特定の理由がない限り、通常はこれを手動で実行する必要はありません。
まず、my-time-machine
ディレクトリにいることを確認します。
cd ~/project/my-time-machine
次に、reflog エントリの削除オプションを指定してガベージコレクションコマンドを実行します。到達不可能なエントリの有効期限を非常に短く設定して、その効果を示します。
git gc --prune=now --aggressive
このコマンドは、Git にガベージコレクションを直ちに実行するよう指示し(--prune=now
)、緩いオブジェクトをクリーンアップし、到達不可能な reflog エントリを削除するために積極的に実行します(--aggressive
)。
コマンドを実行した後、再度 reflog を確認しましょう。
git reflog
この実験の前により多くの操作を行っていた場合、いくつかの古いエントリが削除されている可能性があります。reflog エントリが 2 つしかないこのシンプルなリポジトリでは、両方のエントリがまだ存在する可能性があります。これは、これらのエントリは比較的新しく、一方はまだ HEAD
と master
から到達可能だからです。ただし、到達不可能なコミットがあるより複雑な履歴がある場合、このコマンドは有効期限設定に基づいてそれらを削除します。
重要なポイントは、reflog は永久に保持されるわけではないということです。Git は古いエントリを削除してスペースを節約します。ただし、通常の開発ワークフローでは、デフォルトの有効期限でほとんどのミスから回復するのに十分です。
reflog エントリには有効期限があることを理解することで、プロジェクトの履歴における重要なポイントを保存するために、意味のあるコミットとブランチを作成することの重要性がわかります。