HOWTO · Git
Git Prune コマンドを使用して Git リポジトリをクリーンアップする
この記事では、git prune コマンドとその目的について説明します。
この記事では、git prune コマンドとその目的について説明します。Git がデータに非常に注意を払っていることを認識しています。
コミットのようにデータを削除しても、Git はそれらを簡単に失うことはありません。これにより、マシンに古いデータが蓄積されます。
そこで、git prune コマンドが実行されます。
git prune コマンドは、孤立した、または到達不能な Git オブジェクトをクリーンアップするために使用する Git のハウスキーピングユーティリティとして説明できます。到達不能なオブジェクトについて話すとき、それらは現在の参照がアクセスできないリポジトリ内のオブジェクトです。
良い例は、git reset <Commit ID> コマンドを使用して前のコミットにロールバックする場合です。Git は、削除されたコミットをぶら下がりオブジェクトとして保存します。
このようなデータを削除するには、git prune コマンドを使用します。
git prune コマンドを使用する
git prune コマンドには、以下のようないくつかの便利なオプションがあります。
$ git prune --dry-run
上記のコマンドを実行して、コマンドの出力を取得します。prune は実行されません。
$ git prune --verbose
上記のコマンドは、すべてのアクションと関連するオブジェクトを表示します。
$ git prune --progress
上記のコマンドを使用して、git prune の進行状況を確認します。
$ git prune --expire <time>
上記のコマンドを使用して、指定した時間(<time>)より古いオブジェクトを削除します。
概念をよりよく理解するために、実際の例を見てみましょう。git log コマンドを実行して、ローカルリポジトリのコミット履歴を確認しましょう。
$ git log --oneline
git reset コマンドを使用して、1つのコミットでロールバックし、HEAD が Sixth Update になるようにします。
$ git reset --hard 27bd68b
HEAD is now at 27bd68b Sixth Update
削除されたコミットを見つけてみましょう。
$ git fsck --lost-found
削除されたコミットは最初のものです。最初の 7 文字で確認できます。
git prune コマンドを実行する前に、now より古いエントリを期限切れにする reflog を実行する必要があります。
$ git reflog expire --expire=now --expire-unreachable=now --all
コマンドをドライランして、どのような変更が発生するかを確認することをお勧めします。
$ git prune --dry-run
これで、prune コマンドを実行できます。
$ git prune --verbose --progress --expire=now
ぶら下がっているコミットがまだリポジトリに存在するかどうかを確認しましょう。
$ git fsck --lost-found
git prune、git fetch --prune、および git remote prune の違い
git fetch --prune コマンドと git remote prune コマンドには同様の機能があります。これらを使用して、リモートリポジトリで削除されたブランチへの参照を削除します。
チームで作業する場合に便利です。メインブランチにマージした後に削除されるリモートブランチを削除する必要があります。
git fetch --prune コマンドは、次の組み合わせです。
$ git fetch --all && git remote prune
prune を開始する前に、リモートリポジトリからフェッチします。前に説明したように、基本的な git prune コマンドはローカルオブジェクトを削除します。