it-swarm.com.de

Git-Unterschied zwischen aktuellem Zweig und Master, jedoch ohne nicht zusammengeführte Master-Commits

Ich möchte einen Vergleich aller Änderungen in einem Zweig, der noch nicht zum Master zusammengeführt wurde.

Ich habe es versucht:

git diff master
git diff branch..master
git diff branch...master

In jedem dieser Fälle enthält das Diff jedoch Inhalte in master, die noch nicht in meinem Zweig zusammengeführt wurden.

Gibt es eine Möglichkeit, einen Unterschied zwischen meinem Zweig und dem Master zu machen, der Änderungen im Master ausschließt, die noch nicht in meinem Zweig zusammengeführt wurden?

135
pillarOfLight
git diff `git merge-base master branch`..branch

Basis zusammenführen ist der Punkt, an dem branch von master abweicht.

Git Diff unterstützt hierfür eine spezielle Syntax:

git diff master...branch

Sie müssen die Seiten nicht tauschen, da Sie dann den anderen Zweig erhalten würden. Sie möchten wissen, was sich in branch geändert hat, seit es von master abweicht, nicht umgekehrt.

Lose verwandt:


Beachten Sie, dass die Syntax .. Und ... Nicht dieselbe Semantik wie in anderen Git-Tools hat. Sie weicht von der in man gitrevisions Angegebenen Bedeutung ab.

Zitieren man git-diff :

  • git diff [--options] <commit> <commit> [--] [<path>…]

    Dies dient zum Anzeigen der Änderungen zwischen zwei beliebigen <commit>.

  • git diff [--options] <commit>..<commit> [--] [<path>…]

    Dies ist gleichbedeutend mit dem vorherigen Formular. Wenn <commit> Auf einer Seite weggelassen wird, hat dies den gleichen Effekt wie die Verwendung von HEAD.

  • git diff [--options] <commit>...<commit> [--] [<path>…]

    In diesem Formular werden die Änderungen in dem Zweig mit und bis zum zweiten <commit> Angezeigt, beginnend mit einem gemeinsamen Vorfahren von beiden <commit>. "git diff A...B" Entspricht "git diff $(git-merge-base A B) B". Sie können eines von <commit> Weglassen, was den gleichen Effekt hat wie die Verwendung von HEAD.

Nur für den Fall, dass Sie etwas Exotisches tun, sollte beachtet werden, dass alle <commit> In der obigen Beschreibung, außer in den letzten beiden Formen, die ".." - Notationen verwenden, beliebige <tree>.

Eine vollständigere Liste der Schreibweisen für <commit> Finden Sie im Abschnitt "SPEZIFIZIEREN VON ÜBERARBEITUNGEN" in gitrevisions[7] . Bei "diff" geht es jedoch um den Vergleich von zwei Endpunkten, nicht von Bereichen, und die Bereichsbezeichnungen ("<commit>..<commit>" Und "<commit>...<commit>") Bedeuten keinen Bereich, wie er in den "SPEZIFIZIERUNGSBEREICHEN" definiert ist. Abschnitt in gitrevisions[7] .

182
Palec

Folgendes hat bei mir funktioniert:

git diff Origin/master...

Hier werden nur die Änderungen zwischen meinem aktuell ausgewählten lokalen Zweig und dem Remote-Master-Zweig angezeigt. Alle Änderungen in meinem lokalen Zweig, die durch Merge-Commits verursacht wurden, werden ignoriert.

26
Jeshurun

Wie auch von John Szakmeister und VasiliNovikov bemerkt, ist der kürzeste Befehl, um das volle Diff aus der Sicht des Meisters auf Ihren Zweig zu bekommen:

git diff master...

Dies verwendet Ihre lokale Kopie des Masters.

Ausgabebeispiel:

Example usage

4