追加・変更・削除が混ざる 2 ブランチ
A は app.js の変更・new.js の追加・old.txt の削除、B は app.js と README.md の変更・old.txt の削除をした、標準的な例です。
入力
A の git diff --name-status の出力
M src/app.js A src/new.js D old.txt
B の git diff --name-status の出力
M src/app.js M README.md D old.txt
結果
エラー 0 件・警告 0 件・情報 1 件
指摘(エラー・警告・情報)
- 情報 全体 --name-status のファイル名と状態だけを比べています。同じファイルを両方で変えていても、変更の中身(行)が衝突するかは判定しません。
| A の変更ファイル | 3 件 |
|---|---|
| B の変更ファイル | 3 件 |
| 両方で同じ状態 | 2 件 |
| 両方で状態が違う | 0 件 |
| A のみ | 1 件 |
| B のみ | 1 件 |
比較表
| パス | A | B | 区分 |
|---|---|---|---|
| README.md | - | M(変更) | B のみ |
| old.txt | D(削除) | D(削除) | 両方で同じ状態 |
| src/app.js | M(変更) | M(変更) | 両方で同じ状態 |
| src/new.js | A(追加) | - | A のみ |
検算(この結果になる理由)
src/app.js は両方で M、old.txt は両方で D なので「両方で同じ状態」です。src/new.js は A だけ、README.md は B だけにあります。状態の文字が違う組み合わせはないので警告はありません。
判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。
このツールの制約
- --name-status の出力はファイル名と状態だけで、変更された行の内容は含みません。同じファイルを両方で変えていても、行が衝突するかどうかは判定できません。
- パスは新しい側のキーで突き合わせるため、片方で名前変更、もう片方で旧パスを変更した場合は、別のパスとして並びます。警告の対象にならないことがあります。
- git の core.quotePath による引用符つきのパスは展開せず、そのままの文字で比べます。-z の出力(NUL 区切り)には対応していません。
ご利用にあたって
- この比較は衝突の見当をつけるためのものです。実際の衝突はマージしてみないと分かりません。
- ブランチ名・ファイル名は端末の外へ送信されませんが、貼り付ける画面の取り扱いには注意してください。