カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

Git で「2つのブランチで同じファイルが修正されているか」を調べる方法

開発を進めていると、複数のブランチで同じファイルを修正してしまい、マージのときに競合が発生することがあります。
「ブランチAとブランチBで、修正ファイルが被っているかどうかを事前に知りたい」──そんなときに役立つ方法を紹介します。

変更ファイル一覧を出力する

まず、それぞれのブランチで どのファイルが変更されたか を一覧にします。

# branch-a の変更ファイル一覧を保存
git diff --name-only main..branch-a > /tmp/a.txt

# branch-b の変更ファイル一覧を保存
git diff --name-only main..branch-b > /tmp/b.txt
  • git diff --name-only main..branch-a
    「main と branch-a の差分に含まれるファイル名」だけを出力します。

共通ファイルを抽出する

次に、2つの一覧を突き合わせて「両方に出てくるファイル」だけを取り出します。

comm -12 <(sort /tmp/a.txt) <(sort /tmp/b.txt)

ここで登場する comm コマンドは「2つのソート済みファイルを比較する」ものです。
オプションを細かく見ていきましょう。

  • sort /tmp/a.txt
    → ファイルをソート(comm はソート済み前提)
  • <( ... )
    → Bash のプロセス置換。コマンドの出力を一時ファイルのように扱えます。
  • comm -12
    → 1列目(aにのみある行)と2列目(bにのみある行)を非表示にし、
    両方に共通する行 だけを出力します。

つまり「branch-a と branch-b の両方で修正されたファイル名」だけがリストアップされます。

補足:競合が出るか確認したい場合

もし「本当にマージ競合が起きるか」まで確かめたいなら、実際にマージをシミュレーションするのも手です。

git checkout branch-a
git merge --no-commit --no-ff branch-b

競合があればその場で検出されます。終わったら

git merge --abort

で元に戻せます。

まとめ

  • git diff --name-only で各ブランチの変更ファイル一覧を取れる
  • comm -12 を使うと 両方で修正されているファイル を抽出できる
  • 実際に競合が起こるかはマージシミュレーションで確認可能

これを知っておけば、マージ作業前に「どの辺が危なそうか」を把握できて安心です。

この記事がお役に立ちましたらシェアお願いします
8 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です