現在のブランチとマスター間のGit diffですが、マージされていないマスターコミットは含まれません 質問する

現在のブランチとマスター間のGit diffですが、マージされていないマスターコミットは含まれません 質問する

まだマスターにマージされていないブランチ内のすべての変更の差分が欲しいです。

私は試した:

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]

おすすめ記事