まだマスターにマージされていないブランチ内のすべての変更の差分が欲しいです。
私は試した:
git diff master
git diff branch..master
git diff branch...master
ただし、いずれの場合も、diff には、自分のブランチにまだマージされていないマスターのコンテンツが含まれています。
まだ自分のブランチにマージされていないマスターの変更を除外して、自分のブランチとマスターの間で差分を取る方法はありますか?
ベストアンサー1
git diff $(git merge-base master branch)..branch
ベースをマージbranch
は から分岐した点ですmaster
。
Git diff はこれに対して特別な構文をサポートしています:
git diff master...branch
Git 2.30.0 以降では、特別な構文にショートカットとして特別なスイッチも追加されました。
git diff --merge-base master branch
branch
両側を入れ替えてはいけません。そうすると、別のブランチが生成されます。から分岐してから で何が変わったのかを知りたいのであってmaster
、その逆ではありません。
branch
この構文を に置き換えたり、完全に削除したりすることもできますHEAD
。以下はすべて、マスターから分岐した現在のブランチの内容を表示します。
git diff master...HEAD
git diff master...
git diff --merge-base master
関連性:
..
および...
構文は他の Git ツールと同じ意味を持たないことに注意してください。 で指定された意味とは異なりますman gitrevisions
。
引用man git-diff
:
git diff [--options] <commit> <commit> [--] [<path>…]
これは、任意の 2 つの間の変化を表示します
<commit>
。
git diff [--options] <commit>..<commit> [--] [<path>…]
これは前の形式と同義です。
<commit>
一方を省略すると、HEAD
代わりに を使用した場合と同じ効果になります。
git diff [--options] <commit>...<commit> [--] [<path>…]
このフォームは、 と を含むブランチの変更を、
<commit>
両方の共通の祖先から始めて、 2 番目の まで表示します<commit>
。 "git diff A...B
" は " " と同等ですgit diff $(git-merge-base A B) B
。 のいずれか 1 つを省略できます。<commit>
これは、代わりに を使用するのと同じ効果がありますHEAD
。何か変わったことをしようとしている場合に備えて、上記の説明の はすべて
<commit>
、".." 表記を使用する最後の 2 つの形式を除いて、任意の にできることに注意してください<tree>
。のより完全な表記法のリストについては
<commit>
、「リビジョンの指定」セクションを参照してください。gitrevisions[7]
ただし、「diff」は範囲ではなく2つのエンドポイントを比較するものであり、範囲表記(「<commit>..<commit>
」および「<commit>...<commit>
」)は、「範囲の指定」セクションで定義されている範囲を意味するものではありません。gitrevisions[7]
。