【Git】リモートで削除されたブランチをローカルでも消す方法!pruneオプションの使い方!

リモートリポジトリで削除されたブランチがローカルリポジトリに残っていると、ブランチの一覧が見づらくなってしまいます。

こうした不要なブランチをローカルリポジトリからも削除するには、Gitの--pruneオプションが便利です。

この記事では、Gitの--pruneオプションについて、以下の内容をわかりやすく解説します。

  • Gitの--pruneオプションとは
  • リモートリポジトリで削除されたブランチをローカルリポジトリからも削除する方法

Gitの--pruneオプションとは

Gitの--pruneオプションはリモートリポジトリで削除されたブランチをローカルリポジトリからも削除するためのオプションです。

git fetchgit pull コマンドに --pruneオプションを付けるか、または git remote prune コマンドを使って実行できます。

# git fetch や git pull コマンドに --pruneオプションを付ける場合
git fetch --prune
git fetch -p  # 省略形
git pull --prune
git pull -p  # 省略形


# git remote prune コマンドの場合
git remote prune <リポジトリ名>
git remote prune origin # リポジトリ名がoriginの場合

「prune(プルーン)」は「取り除く」や「枝を剪定する」という意味の英単語です。

リモートで削除されたブランチをローカルからも削除する方法

例として、以下のようなブランチ一覧がローカルリポジトリにあるとします(外部からcloneしたリポジトリでは、ブランチ名がremotes/origin/XXXという形式で表示されます)。

$ git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/fuga
  remotes/origin/hoge
  remotes/origin/main
  remotes/origin/piyo

他のメンバーがリモート上でhogeブランチとfugaブランチを削除し、リモートリポジトリ(origin)にプッシュしたとします。

$ git push origin --delete hoge
$ git push origin --delete fuga

git fetchgit pullを実行しても、削除されたリモートブランチは自動的にはローカルから削除されません。たとえば、git pullを実行しても、Already up to date.と表示されるだけで、ローカルには残ったままです。

$ git pull
Already up to date.

ここでgit fetch --pruneを実行すると、リモートリポジトリで削除されたブランチ(hogeブランチやfugaブランチ)がローカルリポジトリからも削除されます。

$ git fetch --prune
From C:/Users/user01/Desktop/remoteRepo       
 - [deleted]         (none)     -> origin/fuga
 - [deleted]         (none)     -> origin/hoge

もう一度git branch -aでブランチ一覧を確認すると、リモートで削除されたブランチ(hogeブランチやfugaブランチ)がローカルリポジトリでも消えていることが分かります。

$ git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/piyo

本記事のまとめ

今回は、Gitの--pruneオプションを使ってリモートリポジトリで削除されたブランチをローカルリポジトリからも削除する方法を紹介しました。以下のコマンドを覚えておくと便利です。

git fetch --prune
git pull --prune
git remote prune <リポジトリ名>