- IT総合
-
2025-08-28
開発を進めていると、複数のブランチで同じファイルを修正してしまい、マージのときに競合が発生することがあります。
「ブランチ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