Wie kann man die git diff
nur den Unterschied zwischen zwei Übertragungen anzeigen, ohne die anderen Übertragungen dazwischen?
Das hat bei mir funktioniert, aber wie kann ich jetzt die my.patch
zu einer anderen Branche?
Wie kann man die git diff
nur den Unterschied zwischen zwei Übertragungen anzeigen, ohne die anderen Übertragungen dazwischen?
Das hat bei mir funktioniert, aber wie kann ich jetzt die my.patch
zu einer anderen Branche?
@nacho4d: git checkout other-branch && git apply my.patch && git add . && git commit -am "Nachricht"
Der Vorteil von git apply gegenüber patch ist, dass man Umbenennungen und einige andere git-spezifische Änderungen einfügen kann. Ich verwende gerne git format-patch und git am.
Nach der Differenz /zwischen/ zwei Commits zu fragen, ohne die Commits dazwischen einzubeziehen, macht wenig Sinn. Commits sind nur Momentaufnahmen des Inhalts des Repositorys; die Frage nach dem Unterschied zwischen zwei Commits schließt diese zwangsläufig mit ein. Die Frage ist also, wonach Sie wirklich suchen?
Wie William vorschlug, kann man durch Cherry-Picking das Delta eines einzelnen Commits ermitteln, das auf einem anderen basiert. Das heißt:
$ git checkout 012345
$ git cherry-pick -n abcdef
$ git diff --cached
Dies nimmt die Übergabe 'abcdef', vergleicht sie mit ihrem unmittelbaren Vorgänger und wendet dann dieser Unterschied oben auf '012345'. Dieser neue Unterschied wird dann angezeigt - die einzige Änderung ist, dass der Kontext von "012345" und nicht vom unmittelbaren Vorfahren von "abcdef" stammt. Natürlich kann es zu Konflikten usw. kommen, so dass dieses Verfahren in den meisten Fällen nicht sehr nützlich ist.
Wenn Sie nur an abcdef selbst interessiert sind, können Sie das tun:
$ git log -u -1 abcdef
Dies vergleicht abcdef mit seinem unmittelbaren Vorgänger, allein, und ist normalerweise das, was Sie wollen.
Und natürlich
$ git diff 012345..abcdef
gibt Ihnen alle Unterschiede zwischen diesen beiden Übertragungen an.
Es wäre hilfreich, eine bessere Vorstellung davon zu bekommen, was Sie zu erreichen versuchen - wie ich bereits erwähnt habe, macht es keinen Sinn, nach der Differenz zwischen zwei Commits zu fragen, ohne zu wissen, was dazwischen liegt.
Ich stimme zu, dass es im Allgemeinen nicht viel Sinn macht, zwei Commits zu vergleichen. Aber Git ist wirklich gut darin, Ihnen nicht vorzuschreiben, wie Sie denken sollen. Nehmen wir an, Sie haben zwei Zweige mit unterschiedlichen Commits, die so aussehen, als würden sie die gleichen Änderungen an den gleichen Dateien vornehmen. Ich würde gerne in der Lage sein, Git zu benutzen, um mir zu sagen, ob diese beiden Patches gleich sind, ohne meinen Augen vertrauen zu müssen. Ich denke, dass dies von Nutzen ist.
@ChrisCleeland, das Interdiff-Dienstprogramm kann in diesem Fall sehr nützlich sein. Verwenden Sie git diff, um den Unterschied zwischen jedem Commit und seinem unmittelbaren Elternteil zu ermitteln, und verwenden Sie dann interdiff, um die Unterschiede zu vergleichen.
Interdiff würde sicherlich funktionieren. Da Git bereits Patches speichert, scheint es nicht so schwer zu sein, Patch-Inhalt mit Patch-Inhalt zu vergleichen, anstatt Hashes zu vergleichen.
@OneOfOne git diff <(git show 123456) <(git show abcdef)
funktioniert nicht; diff <(...) <(...)
tut. (Ich habe es gerade ausprobiert).
Zur Überprüfung vollständiger Änderungen:
git diff <commit_Id_1> <commit_Id_2>
Zur Überprüfung nur der geänderten/hinzugefügten/gelöschten Dateien:
git diff <commit_Id_1> <commit_Id_2> --name-only
ANMERKUNG : Für die Überprüfung von diff ohne dazwischen liegende commit, brauchen Sie die commit ids nicht anzugeben.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
19 Stimmen
"git diff" immer zeigt den Unterschied zwischen zwei Commits (oder Commit und Arbeitsverzeichnis usw.).
42 Stimmen
@JakubNarebski, er fragt, wie man den Unterschied zwischen den Änderungen, die durch einen Befehl eingeführt wurden, und den Änderungen, die durch einen anderen Commit eingeführt wurden, erkennen kann. Mit anderen Worten, das Diff von Diffs oder Interdiff.
1 Stimmen
Und wenn Sie den Parameter --dirstat=files zum diff-Befehl hinzufügen, erhalten Sie einen sehr schönen Screenshot der genauen Projekte und Dateien, die geändert wurden, zusammen mit einem Prozentsatz der Änderungen. So geht's: git diff [commit-number] [commit-number] --dirstat=files
1 Stimmen
Diese Frage wäre klarer, wenn Sie ein Beispiel aus der Git-Historie in Form von ASCII-Dateien hinzufügen und genau erklären könnten, welche Commits Sie aus diesem Diagramm ausschließen möchten.
0 Stimmen
Dies mag Ihre Frage direkt beantworten, aber versuchen Sie es mit Meld oder kdiff3 oder einem anderen grafischen Tool
0 Stimmen
@JakubNarebski laut Dokumentation ist die Standardeinstellung "Änderungen zwischen dem Arbeitsbaum und dem Index anzeigen", nicht zwei Übertragungen
0 Stimmen
@simpleuser Ich meinte den Befehl "git diff" im Allgemeinen, nicht speziell
git diff
ohne Parameter; wichtig ist, dass es bei "git diff" immer um zwei Endpunkte geht, und immer überspringt zwischenzeitliche Übertragungen.