Nach einer "einfachen" Zusammenführung (eine ohne Konflikte) wird git show
normalerweise nur so etwas angezeigt
commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date: Tue Feb 22 00:27:17 2011 +0100
Merge branch 'testing' into master
Dies liegt daran, dass für Zusammenführungen git show
das kombinierte Diff-Format verwendet wird, bei dem Dateien weggelassen werden, die mit einer der übergeordneten Versionen übereinstimmen.
Gibt es eine Möglichkeit, git zu zwingen, im kombinierten Diff-Modus immer noch alle Unterschiede anzuzeigen?
git show -m
Wenn Sie dies tun, werden die Unterschiede angezeigt (unter Verwendung paarweiser Unterschiede zwischen der neuen und allen übergeordneten Versionen), aber ich würde es vorziehen, wenn die Unterschiede in den jeweiligen Spalten mit +/- gekennzeichnet sind, wie im kombinierten Modus.
Antworten:
Nein, damit gibt es keine Möglichkeit
git show
. Aber manchmal wäre es sicherlich nett, und es wäre wahrscheinlich relativ einfach, es im Git-Quellcode zu implementieren (schließlich muss man ihm nur sagen, dass er nicht herausschneiden soll, was er für eine fremde Ausgabe hält), also den Patch, um dies zu tun würde wahrscheinlich von den Git-Betreuern akzeptiert werden.Seien Sie jedoch vorsichtig, was Sie sich wünschen. Das Zusammenführen eines Zweigs mit einer einzeiligen Änderung, die vor drei Monaten gegabelt wurde, hat immer noch einen großen Unterschied zur Hauptlinie, und daher wäre ein solcher vollständiger Unterschied fast völlig nicht hilfreich. Deshalb zeigt git es nicht.
quelle
Sehen Sie sich die Commit-Nachricht an:
Beachten Sie die Zeile:
Nehmen Sie diese beiden Commit-IDs und kehren Sie sie um. Um den gewünschten Diff zu erhalten, würden Sie Folgendes tun:
um nur die Namen der geänderten Dateien anzuzeigen:
und um sie zu extrahieren, können Sie dies zu Ihrer gitconfig hinzufügen:
Verwenden Sie es dann, indem Sie Folgendes tun:
quelle
git diff fc17405...ee2de56
- dies zeigt alle Änderungen an ee2de56, die durch Commits auf fc17405 erreichbar sind, was meiner Meinung nach das ist, was Sie wollen. Beachten Sie die 3 Punkte anstelle von zwei.git log
, was immer noch alle Commits anzeigt, wie die..
Variante...
und...
mach das gleiche fürlog
, aber fürdiff
sie sind anders!? Wie erhalte ich eine Liste der Commits, die in diesem Zweig zusammengeführt wurden?Eine bessere Lösung (von @KrisNuttycombe erwähnt):
für das Merge-Commit:
um alle Änderungen
ee2de56
anzuzeigen, die ab Commits erreichbar sindfc17405
. Beachten Sie die Reihenfolge der Commit-Hashes - sie entspricht der Reihenfolge in den Zusammenführungsinformationen:Merge: fc17405 ee2de56
Beachten Sie auch die 3 Punkte
...
anstelle von zwei !Für eine Liste der geänderten Dateien können Sie Folgendes verwenden:
quelle
Sie können einen Zweig erstellen, bei dem HEAD vor dem Zusammenführen auf ein Commit festgelegt ist. Dann können Sie Folgendes tun:
Dies wird zusammengeführt, aber nicht festgeschrieben. Dann:
quelle
Scheint hier beantwortet zu sein: https://public-inbox.org/git/[email protected]/
quelle
Ich denke du brauchst nur 'git show -c $ ref'. Wenn Sie dies im Git-Repository auf a8e4a59 versuchen, wird ein kombinierter Unterschied angezeigt (Plus- / Minuszeichen in einer von 2 Spalten). Wie im git-show-Handbuch erwähnt, delegiert es so ziemlich an 'git diff-tree', sodass diese Optionen nützlich aussehen.
quelle
git show -c $ref
dieselbe Ausgabe angezeigt, die ich zitiert habe, dh keine Unterschiede.-c
wählt einen kombinierten Diff-Modus aus, der dem Standardmodus für Merge-Commits sehr ähnlich ist: '--cc', siehegit help show
undgit help diff-tree
. In beiden Fällen werden Dateien, die mit einer der übergeordneten Versionen dieser Datei übereinstimmen, vollständig weggelassen.a8e4a59
in der Tat fällt nicht in die Kategorie der Merge Commits, meine ich. Dieses Zusammenführungs-Commit enthält tatsächlich eine Datei, die sich von den beiden übergeordneten Versionen unterscheidet.Documentation/git-fast-import.txt
hat einige Dinge von einem Elternteil und einige von dem anderen hinzugefügt. Dies führt zu einer nicht leeren Ausgabe vongit diff-tree --cc
. Es werden jedoch nur die Änderungen in diesem "widersprüchlichen" Fall angezeigt. Alle "sauberen" Zusammenführungsergebnissegit show -m a8e4a59
werden überhaupt nicht angezeigt.git show -c
Ausgabe nicht berücksichtigt werden. (man git-diff-tree
sagt "Außerdem listet es nur Dateien auf, die von allen Eltern geändert wurden.", aber ich jedenfalls hatte das sicherlich nicht entdeckt.)in deinem Fall musst du nur
oder nur Hash für Sie begehen:
quelle
git merge-base HEAD^ HEAD^2
undHEAD^
undHEAD^2
im gleichen Stil anzeigt, wie dies bei Dateien der Fall ist, die mit Konflikten zusammengeführt wurden.Wenn Ihr Merge-Commit wie oben Commit 0e1329e5 lautet, können Sie den Diff, der in diesem Merge-Commit enthalten war, abrufen, indem Sie:
Ich hoffe das hilft!
quelle
Wenn Sie beim Zusammenführungs-Commit sitzen, zeigt dies die Unterschiede:
git diff HEAD~1..HEAD
Wenn Sie nicht am Merge-Commit teilnehmen, ersetzen Sie HEAD einfach durch das Merge-Commit. Diese Methode scheint die einfachste und intuitivste zu sein.
quelle
Sie können den Befehl diff-tree mit dem Flag -c verwenden. Dieser Befehl zeigt Ihnen, welche Dateien sich beim Zusammenführungs-Commit geändert haben.
Ich habe die Beschreibung der Flagge -c von Git-Scm erhalten :
quelle
Ich habe einen universellen Ansatz entwickelt, um verschiedene Operationen an den Commits einer Fusion durchzuführen.
Erster Schritt : Fügen Sie git einen Alias hinzu, indem Sie Folgendes bearbeiten
~/.gitconfig
:Schritt 2 :
~/.githelpers
Definieren Sie in eine Bash-Funktion:Schritt drei : Profitieren Sie!
Hier gibt es wahrscheinlich viel Raum für Verbesserungen. Ich habe dies nur zusammengepeitscht, um eine nervige Situation zu überwinden. Fühlen Sie sich frei, meine Bash-Syntax und / oder Logik zu verspotten.
quelle