🎋
Gitブランチ削除の詳細ガイド:安全にローカルブランチを整理する方法
開発を続けていると、ローカルに不要なブランチが溜まってしまいますよね。ブランチの整理は非生産的な作業なので、腰が重たくなりがち。
この記事では、ようやく重い腰をあげた筆者がGitブランチを安全に削除する方法を詳しく解説します。
基本的なブランチ削除コマンド
まずは最低限、基本の2つ。定期的に削除できる方はこれだけでも良いかも。
通常の削除(マージ済みブランチのみ)
git branch -d <branch-name>
強制削除(マージされていないブランチも削除)
git branch -D <branch-name>
リモート関連のブランチ削除
リモートで削除済みのローカルブランチを削除
GitHubなどのリモートリポジトリでブランチが削除されても、ローカルにはそのブランチの「追跡ブランチ」が残り続けます。
例
- GitHubで feature/login ブランチをマージ後に削除
- ローカルでは origin/feature/login の参照が残っている
- git branch -a で確認すると不要な origin/xxx ブランチが表示される
git remote prune origin
# または
git fetch --prune
マージ済みブランチの一括削除
溜め込んだブランチはこの方法で削除しています。
マージ済みブランチを一覧表示
git branch --merged | grep -v "\*\|main\|master\|develop"
削除方法1: 確認プロンプト付き削除
git branch --merged | grep -v "\*\|main\|master\|develop" | xargs -p -n 1 git branch -d
削除方法2: 一括削除(注意深く使用)
git branch --merged | grep -v "\*\|main\|master\|develop" | xargs -n 1 git branch -d
プロンプト付きの方が安全なのでおすすめ。
安全なブランチ削除のベストプラクティス
1. 削除前の確認事項
現在のブランチを確認
git branch
マージ状況を確認
以下のコマンドでそれぞれマージ済み、未マージのブランチ一覧が表示されます。
git branch --merged
git branch --no-merged
2. 重要なブランチを除外する
保護すべきブランチを除外する正規表現
指定したブランチ名が除外されます。指定する文字列は各々の環境によって調整してください。
grep -v "\*\|main\|master\|develop\|staging\|release"
3. 段階的な削除プロセス
Step 1: 削除対象を表示
git branch --merged | grep -v "\*\|main\|master\|develop"
Step 2: 手動で確認して、問題なければ実行
git branch --merged | grep -v "\*\|main\|master\|develop" | xargs -n 1 git branch -d
こうすることで、削除対象のブランチを1つずつ確認しながら削除できて安全に作業ができます。
よくあるエラーと対処法
エラー: error: Cannot delete branch 'feature/xxx' checked out at ...
解決方法: 別のブランチに切り替えてから削除
git checkout main
git branch -d feature/xxx
エラー: error: The branch 'feature/xxx' is not fully merged.
解決方法: 強制削除または内容を確認
git branch -D feature/xxx # 強制削除
# または
git log --oneline feature/xxx # 内容を確認
削除したブランチの復旧
削除したブランチのコミットハッシュを探す
git reflog
ブランチを復旧
git checkout -b <branch-name> <commit-hash>
まとめ
ブランチの削除は以下の順序で行うのが安全です。
- 確認:
git branch --merged
で削除対象を確認 - 除外: 重要なブランチを除外する
- 実行: 確認プロンプト付きで削除
- 検証: 削除後の状態を確認
定期的なブランチ整理により、リポジトリを清潔に保ち、開発効率を向上させましょう。
Discussion