2016-06-28 9 views
0

Also sage ich ein git diff tun, wo ich mehrere Zeilen in der gleichen Gegend bin der Bearbeitung, und ich bekomme:Gibt es eine Möglichkeit, die Zeilen zu bestellen, die ein git diff Änderungen anzeigt?

- Change 1 
+ Change1 
- Change 2 
+ Change2 

Kann ich die Reihenfolge zu ändern, die die diffs auftauchen, so etwas zu sein:

Auf diese Weise könnte ich leichter zeigen, welche Änderungen ich gemacht habe, wenn jemand beschließt, mein Commit mit dem vorherigen auf GitHub zu vergleichen.

Antwort

1

Die Bestellung von git diff Ausgabe wird durch die Reihenfolge der Quellzeilen bestimmt, da es sequenziell arbeitet. So ist die Antwort auf die Frage in der Betreffzeile dieser SO-Posting ("gibt es einen Weg, [die] Zeilen zu bestellen") einfach "nein".

Aber das scheint nicht die Frage , basierend auf Ihrem Beispiel zu sein. (Gut, dass, sofern Sie ein Beispiel!)

Schauen wir uns einige tatsächliche git diff Ausgabe einen Blick darauf werfen, und wie these two command line argument control knobs beeinflussen es:

-Un, --unified=n

            generieren diffs mit n Linien des Kontexts statt der üblichen drei. Impliziert -p.

--inter-hunk-context=lines

            zeigen den Zusammenhang zwischen diff-große Stücke, bis die festgelegte Anzahl von Zeilen, wodurch große Stücke, Verschmelzen, die einander nahe sind.

Ich habe ein Repository mit nur einer README Datei erstellt und dann zwei Änderungen daran vorgenommen. Die erste Änderung ist auf der Linie 1 und die zweite ist auf der Linie 9 Hier ist der Standard git diff Ausgabe:

$ git diff 
diff --git a/README b/README 
index 441ad85..0e6fd7d 100644 
--- a/README 
+++ b/README 
@@ -1,4 +1,4 @@ 
-This is a README file 
+This is a README file MOD1 
which I am using just 
for showing some 
cases of using 
@@ -6,4 +6,4 @@ git diff with 
flags to adjust 
the amount of 
context that will 
-be shown. 
+be shown. MOD2 

des -U Lassen verwenden, um die Menge an Kontext von drei Zeilen nur ein bis zu verringern:

$ git diff -U1 
diff --git a/README b/README 
index 441ad85..0e6fd7d 100644 
--- a/README 
+++ b/README 
@@ -1,2 +1,2 @@ 
-This is a README file 
+This is a README file MOD1 
which I am using just 
@@ -8,2 +8,2 @@ the amount of 
context that will 
-be shown. 
+be shown. MOD2 

Das diff ist kürzer, hat aber immer noch einige Kontext. (Übrigens, es gibt keinen "oben" -Kontext für MOD1 und keinen "unter" -Kontext für MOD2, da die Datei keine Zeilen über oder unter diesem Punkt hat. Normalerweise wären beide Ausgaben etwas länger, wenn die Datei mehr Text hätte Wir hätten drei Zeilen Kontext über Zeile 1 und drei Zeilen unter Zeile 9 im ersten Vergleich, wenn diese verfügbar wären: Wir hätten 1 Zeile über Zeile 1 und 1 Zeile unter Zeile 9 in der zweiten.)

die Linien-of-context Erhöhung hat den Nebeneffekt die Differentiale des Verschmelzens:

$ git diff -U4 
diff --git a/README b/README 
index 441ad85..0e6fd7d 100644 
--- a/README 
+++ b/README 
@@ -1,9 +1,9 @@ 
-This is a README file 
+This is a README file MOD1 
which I am using just 
for showing some 
cases of using 
git diff with 
flags to adjust 
the amount of 
context that will 
-be shown. 
+be shown. MOD2 

Dies liegt daran, mit 4 Zeilen des diff HUNK unterhalb der Änderungs Kontextes auf der Linie 1 zeigt den Zeilen 1 bis einschließlich 5; mit 4 Zeilen Kontext über der Änderung auf Zeile 9; Das Diff-Hunk zeigt die Zeilen 5 bis einschließlich 9. Zeile 5 und Zeile 5 sind gleich, also werden die beiden Kerben verschmolzen.

Oder auch wenn -U1 oder etwas verrückt -U0 (kein Kontext überhaupt) verwendet wird, kann ich --inter-hunk-context verwenden zusätzliche Kontext zwischen der ersten und zweiten diff großes Stück an, bis zu dem Punkt, wo sie beitreten. Mit -U1 benötige ich --inter-hunk-context=5, um irgendeinen Effekt zu erhalten.

$ git diff -U1 --inter-hunk-context=5 
diff --git a/README b/README 
index 441ad85..0e6fd7d 100644 
--- a/README 
+++ b/README 
@@ -1,9 +1,9 @@ 
-This is a README file 
+This is a README file MOD1 
which I am using just 
for showing some 
cases of using 
git diff with 
flags to adjust 
the amount of 
context that will 
-be shown. 
+be shown. MOD2 

Diesmal zeigt die erste HUNK Zeilen 1 bis 2, und die zweiten Linien zeigen 8 bis 9. Wir fügen 5 mehr Zeilen-4, die Linien 3, sind, 5, 6, und 7-und jetzt die zwei Kerben grenzen an und werden in ein diff-Stück verschmolzen.

Unter Verwendung von -U0 benötigen wir --inter-hunk-context=7, da die Basis-Diff-Hunks nur für Zeile 1 und Zeile 9 gelten, und wir müssen Zeilen 2 bis 8 (7 Zeilen) hinzufügen, damit sie sich verbinden.

Es gibt eine weitere relevante Option, die Sie verwenden können:

-W, --function-context

            anzeigen ganze Funktionen von Änderungen umgibt.

Für diese besondere README Datei, die Klartext-Englisch enthält, ist diese Option nicht sinnvoll, da es keine „Funktionen“ in einer solchen Datei sind. Ob -W funktioniert, hängt von der Sprache der Datei ab und ob Git Funktionen erkennen kann, die in dieser Sprache geschrieben sind.

Verwandte Themen