すずけんメモ

技術メモです

remoteリポジトリで削除されているブランチが手元に残っている場合に、ローカルのブランチをまとめて消す方法

remoteリポジトリで削除されてしまっているブランチを消したい場合がある。以下の様な状態のときだ。

-> % git remote show origin
* remote origin
  Fetch URL: git@github.com:suzuken/hoge.git
  Push  URL: git@github.com:suzuken/hoge.git
  HEAD branch: master
  Remote branches:
    master                                         tracked
    refs/remotes/origin/fuga                  stale (use 'git remote prune' to remove)

これはtrack済みのブランチがremoteで消えてしまっているケースだ。例えばGitHubでpull-requestをマージした後にブランチを消した場合などにはこうなる。今のチームの運用ではマージ済みトピックブランチは消すようにしている。なのでこういった状態は平常である。

このremoteブランチに関するtrack情報を消すためにはgit pruneを利用する。--dry-runオプションでprune対象のブランチを確認することができる。

-> % git remote prune origin --dry-run
Pruning origin
URL: git@github.com:suzuken/hoge.git
 * [would prune] origin/fuga

実際にpruneする。

-> % git remote prune origin
Pruning origin
URL: git@github.com:suzuken/hoge.git
 * [pruned] origin/fuga

ちなみに、pruneとは

1 〈枝・根などを〉切り取る, おろす*1;〈木を〉刈り込む, 剪定せんていする*2.

2 〈人員などを〉削る;〈費用などを〉切り詰める;〈文章などを〉簡潔にする*3;〈物から〉(余計な物を)取り除く*4

http://kotobank.jp/ejword/prune より

との意味。余計なものを取り除く。

*1:back, away, down, off

*2:back

*3:down

*4:of ...