内藤 裕二/ 2025年 11月 11日/ 技術

こんにちは!内藤です!
札幌では雪が降りはじめました。あっという間に冬ですね。

今回はGitのブランチに関して、普段あまりやらない操作をしたので、まとめてみます。

前段

システム開発を行う際に、バージョン管理にGitを使用されていると思います。
Gitはマージ機能が強力なため、
・メンバごとに作業ブランチを作成して個別に作業
・ある程度実装が済んだところで、レビューして本流ブランチにマージ
という運用をしているところが多いです。

マージが終わった後の作業用ブランチは、その時点で削除するという運用にしているところが多いかと思います。

先日参画したプロジェクトは人数が多く、またPoCを並行で実施していたため、
・試してみたが、採用されなかった設計のブランチ
・最終的に採用された設計のブランチ
が存在し、それぞれに対する作業用ブランチが偏在している状況でした。

本来であれば、最終的に採用された設計のブランチ以外は不要なのですが、後日の参考のために、うまくいかなかった設計のブランチも残しておこう、という話になりました。

実際にやったこと

マージ済みのブランチを削除する

どこかのブランチにマージされているブランチは、基本的に削除してしまって良いはずです。
ある作業用ブランチがどこのブランチにマージされているかを調べます。
例として、feature/abcという作業用ブランチのマージ先は、下記のコマンドで調べられます。

git fetch --all
git branch -r --contains feature/abc

Cherry-Pickされたブランチを見つける

前の手順で、どこにもマージされていないブランチが残りました。
残ったブランチのコミットログを追ってみると、どうも他のブランチにcherry-cickされているブランチがあるようです。

「最終コミットが新しい方のブランチがcherry-pickした側である」という推測に基づいて、内容を確認していきます。

ブランチの最終コミット日時については、下記のコマンドで一覧出力できます。

git fetch --all
git for-each-ref --sort=-committerdate --format='%(committerdate:iso8601) %(refname:short)' refs/remotes/

この情報に基づいて、同じメンバがコミットしているブランチで、cherry-pickされていないか確認していきます。

ブランチの比較はgit cherryコマンドで行います

git cherry temporary/main feature/abc

コミットハッシュの一覧が出力されますが、行頭に+/-のいずれかがついています。
これは、

  • 「+」がついている:feature/abcにしか存在しないコミット
  • 「-」がついている:両方のブランチに含まれるコミット
    を表しています。

最終的にはコミットログも参照しながら、すべてのコミットが別のブランチに含まれているブランチを削除していきました。

手間がかかりましたが、これですっきりとブランチを整理することができました。

まとめ

なかなか手間がかかりました。
あまり普段使用しないGitコマンドを使用したので、勉強にはなりました。
作業用ブランチは、こまめに消しましょう・・・