Git でのリモートブランチの削除に関するコマンドと解説です。
目次
リモートブランチを削除する Git コマンド
ローカルブランチは「git branch -d」というおおよそ直感的なコマンドで削除できます。一方で、リモートブランチや、リモート追跡ブランチは少し勝手が違います。ちゃんと削除しないとどんどん溜まってしまいますので、これらを整理していきましょう。
リモートブランチの削除コマンドのポイントは「git push」コマンドを使う点です。2種類の方法がありますが、まず一つは、--deleteオプションを付け git push を行う方法です。
# 方法1)リモートブランチを削除する
$ git push --delete origin <remote branch name>
また下記も同じ効果を得られる、別のgit pushコマンドです。
# 方法2)リモートブランチを削除する
$ git push origin :<remote branch name>
2つめの意味がややわかりにくいですが、git pushコマンドには <local branch>:<remote branch>というコロンで区切るオプションが存在します。上記の削除コマンドでは、<空文字>:<remote branch>という表現で「何もない」をプッシュすることで、「削除する」コマンドという解釈になるようです。
この:<remote branch>というのはオプショナルで、指定しない時(通常は指定しないことが多いと思います)の振る舞いは<local branch>と同じ名前のリモートブランチ名がプッシュの対象になるようです。
git push の振る舞いに関しては、こちらに詳しくまとめました:
リモート追跡ブランチを削除する Git コマンド
上述のリモートブランチ削除のコマンドは、自分のローカル環境にある「リモート追跡(トラッキング)ブランチ」も同時に削除してくれます。Git の親切設計ですね。
一方で、チームの他のメンバーが、共有するオリジンのリモートブランチを削除した場合は、自分のローカル環境では「リモート追跡ブランチ」はしっかりと残ってしまいます。
このまま放っておいてもあなたのローカルにあるリモート追跡ブランチはずっと残ったままになってしまいます。
Git には、このようなリモート追跡ブランチも削除するコマンドが用意されてます。
# リモートトラッキングブランチを削除
$ git branch -dr <remote tracking branch>
# 上記と同義
$ git branch -d -r <remote tracking branch>
$ git branch --delete -remotes <remote tracking branch>
「-r」は「--remotes」のショートハンドですね。リモートが存在しない場合、普通リモート追跡ブランチもいらない事がほとんどなので、不要な場合は忘れずに削除しておきましょう。
どんどん溜まってしまうから、ときどき整理したいね。
【補足1】削除したブランチを復活させる
間違ってブランチを削除しても、ローカルブランチであれば、git branch コマンドを利用して元に戻せます
# 過去のHEADの移動をリスト
$ git reflog
# 過去の特定のコミットでブランチを再度作成
$ git branch <ブランチ名> HEAD@{6}
BRANCH_NAME に元々のブランチ名か、新しいブランチ名を指定して下さい、HEAD@{N} を起点に、ブランチが改めて生成されます。
git reflog は、参照(refs)の移動をすべて記録(log)してくれているんだったね。
【補足2】--prune オプションを用いた追跡ブランチ削除について
リモートとの関連のあるgit コマンドの多くは、「--prune」と呼ばれるオプションを持っています。これらは、ローカルのブランチと、リモートのブランチとの差分をみて、リモートのブランチ有無とローカルのそれの整合を取るような動きをします。このオプションを用いて、ブランチを削除することもできます。
git fetch 時に、不要なリモート追跡ブランチを削除する
fetch に--pruneを追加した例です。リモート→リモート追跡 のシンクさせる意味で、使い勝手のよいコマンドです。リモートレポジトリで(下記では、origin で)もしすでに削除されているブランチがあれば、対応する追跡ブランチを削除してくれます。
# リモート(origin)で削除されたブランチに対応する追跡ブランチを削除
$ git fetch --prune
Git のブランチ削除に関する参考リンク
Gitマニュアルは、なんでも書いてありますね。オプションを探すのがちょっと大変ですが。
さて、以上になります。うまくブランチを削除できたでしょうか?それでは、快適なgitライフを。
git push がリモートブランチの削除に利用できるんだね。