Git Prune コマンドを使用して Git リポジトリをクリーンアップする
この記事では、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
コマンドはローカルオブジェクトを削除します。
John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.
LinkedIn