開発ブログ
Git、CSS、HTML、正規表現など、入門者がつまづきそうなポイントを中心に、役立ち情報発信します。。

Gitでローカルブランチ・リモートブランチを削除する方法

最終更新:2018-04-03 by Joe

Git でのブランチの削除に関するコマンドと解説です。

ローカルブランチは「git branch -d」というおおよそ直感的なコマンドで削除できます。一方で、リモートブランチは・・、?となる初学者は非常に多いと思います。リモートブランチや、リモート追跡ブランチもちゃんと削除しないとどんどん溜まってしまいます。これらを整理するための方法をまとめます。

ブランチを削除するGitコマンド

ローカルブランチ、リモートブランチ、およびリモート追跡ブランチを削除するコマンドをそれぞれ紹介します。

ローカルブランチを削除する

ローカルブランチの削除コマンドから。「git branch -d <BRANCH_NAME>」のオプション付きで、削除できます。

# ローカルブランチを削除(すべて同義)
git branch -d 
git branch --delete

# マージされていないローカルブランチを削除(すべて同義)
git branch -D
git branch -df
git branch --delete --force

うまくブランチが削除できない?

ローカルブランチの削除では、現在のHEADに履歴がつながっていない場合、エラーがでて削除できません。これをこれはすなわち、ブランチ削除操作により変更履歴をたどる方法が失われてしまう場合です。(実際には、コミット履歴自体は残りますので、復元は可能です。Git における「ブランチ」とはコミットへの参照でしかありません)

一方で、もし対象のブランチに「上流ブランチ」が設定してあって、すでにPUSHされていれば、リモート追跡ブランチ参照が残りますので、警告はでますが、削除できます。

とにかく、不要なことがわかっているブランチは、「-D」オプションを使って、強制的に削除します。大文字のDは、--delete --forceのショートハンドというわけですね。

マージされていない不要なブランチを探そう!

ちなみに、マージ済み(HEADにつながっている)のブランチと、マージされていないブランチは、それぞれ下記のコマンドで一覧できます。不要なブランチを探すのに役立つでしょう。

# マージ済のブランチの一覧
git branch --merged

# マージされていないブランチを一覧
git branch --no-merged

リモートブランチを削除する

リモートブランチの削除コマンドのポイントは「git push」コマンドを使う点です。

2種類の方法がありますが、まず一つは、--deleteオプションを付けgit pushを行う方法です。

# リモートブランチを削除する
git push --delete origin <remote branch name>

また下記も同じ効果を得られる、別のgit pushコマンドです。

# リモートブランチを削除する
git push origin :<remote branch name>

2つめの意味がややわかりにくいですが、git pushコマンドには <local branch>:<remote branch>というコロンで区切るオプションが存在します。上記の削除コマンドでは、<空文字>:<remote branch>という表現で「何もない」をプッシュすることで、「削除する」コマンドという解釈になるようです。

この:<remote branch>というのはオプショナルで、指定しない時(通常は指定しないことが多いと思います)の振る舞いは<local branch>と同じ名前のリモートブランチ名がプッシュの対象になるようです。

・・・と、マニュアルに書いていますので、気になる方は、こちらを直接ご参照下さい:

リモート追跡ブランチを削除する

上述のリモートブランチ削除操作によって、自分が作成したリモート追跡は同時に削除されます。一方で、チームの他のメンバーがリモートブランチを削除した場合は、リモートとローカルのブランチを削除しても、リモート追跡トラッキング(=追跡)ブランチはしっかりと残ってしまいます。このまま放っておいてもあなたのローカルにあるリモート追跡ブランチはずっと残ったままになってしまいます。

Git には、このようなリモート追跡ブランチも削除するコマンドが用意されてます。

# リモートトラッキングブランチを削除
git branch -dr <remote tracking branch>

# 上記と同義
git branch -d -r <remote tracking branch>
git branch --delete -remotes <remote tracking branch>

「-r」は「--remotes」のショートハンドですね。リモートが存在しない場合、普通リモート追跡ブランチもいらない事がほとんどなので、不要な場合は忘れずに削除しておきましょう。

削除したブランチを復活させる

間違ってブランチを削除しても、ローカルブランチであれば、git branch コマンドを利用して元に戻せます

# 過去のHEADの移動をリスト
git reflog

# 過去の特定のコミットでブランチを再度作成
git branch BRANCH_NAME HEAD@{6}

BRANCH_NAME に元々のブランチ名か、新しいブランチ名を指定して下さい、HEAD@{N} を起点に、ブランチが生成されます。

--prune オプションを用いた追跡ブランチ削除について

リモートとの関連のあるgit コマンドの多くは、「--prune」と呼ばれるオプションを持っています。これらは、ローカルのブランチと、リモートのブランチとの差分をみて、リモートのブランチ有無とローカルのそれの整合を取るような動きをします。このオプションを用いて、ブランチを削除することもできます。

git fetch 時に、不要なリモート追跡ブランチを削除する

fetch に--pruneを追加した例です。リモート→リモート追跡 のシンクさせる意味で、使い勝手のよいコマンドです。リモートレポジトリで(下記では、origin で)もしすでに削除されているブランチがあれば、対応する追跡ブランチを削除してくれます。

# リモート(origin)で削除されたブランチに対応する追跡ブランチを削除
git fetch --prune

Git のブランチ削除に関する参考リンク

Gitマニュアルは、なんでも書いてありますね。オプションを探すのがちょっと大変ですが。

さて、以上になります。うまくブランチを削除できたでしょうか?それでは、快適なgitライフを。

閉じる