DESIGN / CODE / INFRA / AI

解説

この修正はmainへ入った?git branch --containsでコミットから確認しよう

修正用ブランチの名前は覚えているけれど、そのコミットがmainへ入ったか分からない。コミットを手掛かりに、含んでいるブランチを確認する方法を試してみよう。

この修正はmainへ入った?git branch --containsでコミットから確認しよう
保存リストを見る →
この記事の道しるべ 6項目

修正用ブランチの名前は覚えているけれど、そのコミットがmainへ入ったか分からない。コミットを手掛かりに、含んでいるブランチを確認する方法を試してみよう。

この記事は、空の練習リポジトリで二つのブランチを作る。リモートへpushせず、本番の履歴や共同作業中のブランチは変更しないよ。

--containsが調べること

git branch --containsにコミットを指定すると、そのコミットを祖先として含むブランチを絞って表示できる。通常の指定ではローカルのブランチを見る。

git branch --contains <確認するコミット>

単にブランチ名が存在するか、同じ文章が今のファイルにあるかを調べる操作とは違う。何を確認したい修正なのか、まず対象のコミットを特定しよう。

修正だけを別の枝へ作る

mkdir contains-practice
cd contains-practice
git init -q -b main
git config user.name Practice
git config user.email practice@example.com
printf 'base\n' > note.txt
git add note.txt
git commit -qm base
git switch -c fix
printf 'fixed\n' >> note.txt
git add note.txt
git commit -qm fix
practice_fix=$(git rev-parse HEAD)
git switch main
git branch --contains "$practice_fix"

この時点では、修正コミットを持つfixだけが表示される。練習用の利用者設定は、このリポジトリだけのもの。既存の作業フォルダーと同じ名前なら、別の新しい名前で始めよう。

mainへ進めたあとに比べる

この練習はmainに別の変更を作っていないので、次のfast-forwardを試せる。

git merge --ff-only fix
git branch --contains "$practice_fix"

今度はmainとfixの両方が対象になる。先頭の*は、現在いるブランチを示す。編集部では、二つの状態の一覧と、コミットの位置を実際に作って確認した。

普段のリポジトリで、確認したいからといってそのままmergeする必要はないよ。ここでのmergeは、比較する状態を自分で作るための練習だと分けよう。

同じ内容でも、同じコミットとは限らない

cherry-pickやsquash、rebaseなどで修正を取り込むと、元のコミットと別のIDになる場合がある。--containsに出ないことだけで、同じ修正内容が絶対に入っていないとは判断しない。

元のコミットが含まれていても、そのあとで変更が戻されたり、別の修正へ置き換わったりする場合もある。含む履歴の確認と、現在の動作の確認は別だよ。

リモートの状態も、手元の情報の鮮度を見る

-rはリモート追跡ブランチ、-aはローカルとリモート追跡の両方を表示する指定。リモート追跡ブランチは、今この瞬間のサーバーへ毎回問い合わせた結果ではない。

必要なら許可された方法でfetchして、いつの情報を見ているかを確かめる。本番へのデプロイまで確認したい場合は、実際に動くリリースのコミットとも照合しよう。

取得の違いはfetchとpull、別の枝の修正を取り込む方法はcherry-pickへ。

参照した公式資料

確認日:2026年10月26日。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。