開発ブログ

WWWクリエイターズが送る、Git、CSS、HTML、コマンドライン、Macの便利機能など、開発に関する役立ち情報発信します。気まぐれに更新。

Gitでブランチを削除する方法、徹底まとめ。

最終更新:2017-10-05 by Joe

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

ローカルブランチは「git branch -d」というおおよそ直感的なコマンドで削除できます。一方で、リモートブランチは・・、?となる初学者は非常に多いと思います。

リモートブランチや、リモート追跡ブランチもちゃんと削除しないとどんどん溜まってしまいます。これらを整理するための方法をまとめます。

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

ローカルブランチの削除コマンドから。

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

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

実際、ローカルブランチの整理では、マージされていないブランチを削除しようとして、しょっちゅう怒られてしまいます。そんなときは、「-D」オプションを使って、強制的に削除します。大文字のDは、--delete --forceのショートハンドというわけですね。なるほど。

マージされていないブランチを一覧する

マージ済みのブランチと、マージされていないブランチは、それぞれ下記のコマンドで一覧できます。

[precode]
マージ済のブランチの一覧
git branch --merged

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

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

リモートブランチの削除コマンドです。

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

// 同義
git push origin :<remote branch name>

ポイントはpushコマンドを使う点です。1つ目は明示的にdeleteをオプションで追加します。

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}

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

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

このオプションを用いて、ブランチを削除することもできます。

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

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

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

参考リンク

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

さて、以上になります。

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

閉じる