不要なローカルブランチおよびリモート追跡ブランチを削除するGitコマンドをまとめます。
あくまでコマンド(おまじない)を書いているだけで、裏側のロジックとか難しいことは書いていません。ご了承ください。
では、簡単にまとめていきます。
ローカルブランチとリモート追跡ブランチの違いがよく分かっていない方は、以下の記事に目を通してみて下さい。
「説明は良いからとにかくGitの削除コマンドだけ知りたい」という方は、以下の目次から「2.おわりに」へ進んで下さい。
Gitで不要なブランチを削除する方法(コマンド)
簡単な例を挙げながら、不要なブランチを削除するコマンドをまとめていきます。
Gitブランチの現状
ターミナルでgit brnach -a
と打ち込むと、以下のようなブランチ状況になっているとします。(-aはリモート追跡ブランチも表示するオプション)
- master(ローカルブランチ)
- feature/develop(ローカルブランチ)
- remotes/origin/master(リモート追跡ブランチ)
- remotes/origin/feature/develop(リモート追跡ブランチ)
そして、開発ブランチであるfeature/developをリモートリポジトリ(GitHub, Bitbucketなど)にプッシュし、プルリクの対応も完了し、リモートのmasterにマージすると同時にリモートブランチを削除したとします。
つまり、ローカルのfeature/developブランチとリモート追跡ブランチremotes/origin/feature/developは完全に用済みで、削除したい状況です。
ということで、最終目標はこちら。masterブランチだけを残します。
- master(ローカルブランチ)
- remotes/origin/master(リモート追跡ブランチ)
では、具体的にどのようなコマンドを打てばこの目標を達成できるのか、以下で紹介していきます。
Gitで不要なリモート追跡ブランチを削除する方法(コマンド)
まずはリモート追跡ブランチ(上記の例でいうとremotes/origin/feature/develop)です。
リモートブランチをすでにマージ・削除している場合、リモート追跡ブランチは以下のコマンドで一括削除できます。(pullとかする必要はなく、リモートでブランチをマージ&削除した時点でこのコマンドが使えます)
git remote prune origin
実際に実行してみると、こんな感じになります。
- master(ローカルブランチ)
- feature/develop(ローカルブランチ)
- remotes/origin/master(リモート追跡ブランチ)
remotes/origin/feature/develop(不要なリモート追跡ブランチ)が削除できています。
リモートでmasterマージに伴い削除したブランチは、以下のコマンドでもリモート追跡ブランチを削除することができます。
git fetch -p
もしくは
git fetch --prune
Gitで不要なローカルブランチを削除する方法(コマンド)
次に、不要なローカルブランチ(feature/develop)を削除しましょう。
以下のコマンドを打ち込みます。feature/developの部分は、任意のブランチ名に書き換え可能です。
git branch -d feature/develop
これを実行することで、以下の状態になります。
- master(ローカルブランチ)
- remotes/origin/master(リモート追跡ブランチ)
masterブランチ(ローカルブランチ・リモート追跡ブランチ)だけ残して、不要なブランチを一掃できました。
git branch -d [ブランチ名]
でブランチを消せない場合は、強制削除コマンドgit branch -D [ブランチ名]
を使ってみて下さい。
Gitで不要なローカルブランチを一括削除する方法(コマンド)
git branch -d
でもローカルブランチの削除はできますが、ブランチを一つ一つ削除する必要があるため、大量のローカルブランチがある場合はとても面倒です。
そこで、最後におまけとして、リモートでマージしたローカルブランチを一括削除する方法をご紹介します。
こちらです。
git branch --merged | grep -v master | xargs git branch -d
このコマンドを打つことで、リモートでマージ済みのローカルブランチを一括削除することができます。
masterと指定してあるのが、「削除しないブランチ」です。この辺りは自身の環境に合わせて書き換えて下さい。(GitHubの場合はmainとか)
また、毎回このコマンドを打つのは面倒だと思うので、alias(コマンドのショートカット)を設定しておくことをおすすめします。
まず、cd
でルートディレクトリに移動した後、vim .gitconfig
で.giconfigを開いて下さい。
関連記事:Gitでalias(エイリアス)を設定する方法をサクッと解説
開いたら、以下のようにaliasを設定します。
delete-local-merged-branch = !git branch --merged | grep -v master | xargs git branch -d
これにより、git delete-local-merged-branch
と打つことで、マージ済みのローカルブランチを一括削除することができます。(コマンドの名前は自由に書き換えて下さい)
git branch --merged | grep -v master | xargs git branch -d
は応用すれば別の動作をさせることもできます。
例えば、masterへのマージの有無に関わらず、指定したブランチ以外のブランチを強制削除したい場合は以下のコマンドを打てばOKです。
git branch | egrep -v 'master|feature/not_delete' | xargs git branch -D
コマンドは用途に合わせて柔軟に書き換えて下さい。
おわりに:Gitのブランチの削除コマンドまとめ
今回は、Gitで不要なブランチを削除する方法・コマンドをご紹介しました。
最後に今回紹介したコマンドをまとめます。
- 不要なリモート追跡ブランチを削除 ->
git remote prune origin
もしくはgit fetch -p
- 不要なローカルブランチを削除 ->
git branch -d feature/develop
- 不要なローカルブランチを一括削除 ->
git branch --merged | grep -v master | xargs git branch -d
- 指定したブランチ以外のローカルブランチを強制削除 ->
git branch | egrep -v 'master|feature/not_delete' | xargs git branch -D
少しでも参考になっていれば幸いです。
Gitのおすすめ教材(Udemyの講座)
Gitを学ぶなら、以下のUdemyの講座がオススメです。
Gitの単なる「使い方」だけでなく、「裏側の仕組み」までしっかりとイメージできるようになります。
参考資料【Git関連】
この記事を書くにあたり、主に以下の記事を参考にさせて頂きました。Gitへの理解を深める上で有用な情報が満載なので、ぜひ目を通してみて下さい。