Ich möchte einen Unterschied 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 der Diff jedoch Inhalte im 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?
git diff master..branch
. Sie können es verkürzen,git diff master..
wenn Sie auf Zweig sind. Dier1..r2
Syntax ist kurz,^r1 r2
was bedeutet "zeig mir alles, von dem abstammtr2
und von dem nicht erreichbar istr1
".git help gitrevisions
enthält Informationen zu den verschiedenen Syntaxen, die Sie verwenden können....
Syntax von gelesen habegit diff
. Ihr Kommentar ist falsch, @jszakmeister, weil die in beschriebenen Revisionsbereichegitrevisions
nichts damit zu tun habengit diff
. Diff vergleicht zwei Punkte in der Geschichte und kann nicht mit einem Bereich arbeiten.git diff
das anders funktioniert als die anderen Befehle ... eine Tatsache, die ich frustrierend finde. :-(Antworten:
Die Zusammenführungsbasis ist der Punkt, von dem
branch
abgewichen wirdmaster
.Git diff unterstützt hierfür eine spezielle Syntax:
Sie dürfen die Seiten nicht tauschen, da Sie dann den anderen Zweig erhalten würden. Sie möchten wissen, was sich geändert hat,
branch
seit es davon abweichtmaster
, und nicht umgekehrt.Locker verwandt:
Beachten Sie, dass
..
und...
Syntax nicht dieselbe Semantik wie in anderen Git-Tools haben. Es unterscheidet sich von der in angegebenen Bedeutungman gitrevisions
.Zitat
man git-diff
:quelle
$ git diff master...branch
produziertfatal: ambiguous argument 'master...branch': unknown revision or path not in the working tree.
- ist das ein versionabhängiger Befehl?branch
. Ich entschied mich, bei dem Namen zu bleiben, den das OP in der Frage gewählt hatte. Wenn Sie den aktuellen Zweig verwenden möchten, ersetzen Sie ihnbranch
durchHEAD
.git diff master...
damit vermeiden können, den Zweig anzugeben (der aktuelle wird verwendet).devel
Auschecken @ChrisGuest? Wahrscheinlich hat Git den Zweig beim Auschecken als lokale Kopie eines Remote-Zweigs (normalerweiseorigin/devel
) für Sie erstellt. Wenn das der Fallgit diff origin/devel...bugfix/API-353-api-allows-database-access-when
wäre , hätte es schon vor dem Auschecken funktioniert.Folgendes hat bei mir funktioniert:
Dies zeigt nur die Änderungen zwischen meinem aktuell ausgewählten lokalen Zweig und dem Remote-Hauptzweig an und ignoriert alle Änderungen in meinem lokalen Zweig, die durch Zusammenführungs-Commits entstanden sind.
quelle
git cherry origin/master
.master
anzeigt, den Sie nicht erwartet haben, haben Sie möglicherweise eine Reihe von Commits unter Ihnen neu erstellt.Wie auch von John Szakmeister und VasiliNovikov bemerkt, ist der kürzeste Befehl, um den vollen Unterschied aus der Sicht des Meisters auf Ihren Zweig zu bekommen ,:
Dies verwendet Ihre lokale Kopie des Masters.
So vergleichen Sie eine bestimmte Datei:
Ausgabebeispiel:
quelle