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