Diese Frage erfordert "Zeilennummern". Wenn Sie sich nicht für Zeilennummern in der Ausgabe interessieren, lesen Sie diese Frage und Antwort .
Grundsätzlich möchte ich nicht den geänderten Inhalt sehen, sondern nur die Dateinamen und Zeilennummern.
Diese Frage erfordert "Zeilennummern". Wenn Sie sich nicht für Zeilennummern in der Ausgabe interessieren, lesen Sie diese Frage und Antwort .
Grundsätzlich möchte ich nicht den geänderten Inhalt sehen, sondern nur die Dateinamen und Zeilennummern.
Antworten:
Hinweis: Wenn Sie nur nach den Namen geänderter Dateien suchen ( ohne die Zeilennummern für geänderte Zeilen) , klicken Sie einfach auf diesen Link, um hier eine andere Antwort zu erhalten .
Es gibt keine eingebaute Option dafür (und ich denke auch nicht, dass es so nützlich ist), aber es ist möglich, dies in Git mit Hilfe eines "externen Diff" -Skripts zu tun.
Hier ist eine ziemlich beschissene; Es liegt an Ihnen, die Ausgabe so zu korrigieren, wie Sie es möchten.
#! /bin/sh
#
# run this with:
# GIT_EXTERNAL_DIFF=<name of script> git diff ...
#
case $# in
1) "unmerged file $@, can't show you line numbers"; exit 1;;
7) ;;
*) echo "I don't know what to do, help!"; exit 1;;
esac
path=$1
old_file=$2
old_hex=$3
old_mode=$4
new_file=$5
new_hex=$6
new_mode=$7
printf '%s: ' $path
diff $old_file $new_file | grep -v '^[<>-]'
Einzelheiten zu "external diff" finden Sie in der Beschreibung GIT_EXTERNAL_DIFF
auf der Git-Handbuchseite (um Zeile 700, ziemlich nahe am Ende).
| grep -o '^[0-9]*'
gibt Ihnen nur Zahlen, vorausgesetzt, Sie interessieren sich nicht für die rechte Seite.
--diff-filter=...
wo das ...
Teil die Art von Änderungen ist, die Sie sehen möchten: M
für geänderte, A
hinzugefügte, D
gelöschte und andere gemäß der git diff
Dokumentation.
So einfach:
git diff --name-only
Geh raus und diff!
git diff --name-only master..HEAD
Zeilennummern wie in Anzahl der geänderten Zeilen oder die tatsächlichen Zeilennummern, die die Änderungen enthalten? Wenn Sie die Anzahl der geänderten Zeilen möchten, verwenden Sie git diff --stat
. Dies gibt Ihnen eine Anzeige wie folgt:
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
Es gibt keine Möglichkeit, die Zeilennummern der Änderungen selbst abzurufen.
git diff master --compact-summary
Ausgabe ist:
src/app/components/common/sidebar/toolbar/toolbar.component.html | 2 +-
src/app/components/common/sidebar/toolbar/toolbar.component.scss | 2 --
Genau das brauchen Sie. Gleiches Format wie beim Festschreiben oder Abrufen neuer Festschreibungen von der Fernbedienung.
PS: Das ist verdrahtet, dass niemand so geantwortet hat.
1) Mein Favorit:
git diff --name-status
Stellt den Dateistatus voran, z.
A new_file.txt
M modified_file.txt
D deleted_file.txt
2) Wenn Sie Statistiken wünschen, dann:
git diff --stat
zeigt so etwas wie:
new_file.txt | 50 +
modified_file.txt | 100 +-
deleted_file | 40 -
3) Schließlich, wenn Sie wirklich nur die Dateinamen wollen:
git diff --name-only
Wird einfach zeigen:
new_file.txt
modified_file.txt
deleted_file
Zeigt die Dateinamen und die Anzahl / Anzahl der Zeilen an, die sich in jeder Datei zwischen jetzt und dem angegebenen Commit geändert haben:
git diff --stat <commit-hash>
Ich weiß, dass dies eine alte Frage ist, aber unter Windows filtert dies die Git-Ausgabe in die Dateien und ändert die Zeilennummern:
(git diff -p --stat) | findstr "@@ --git"
diff --git a/dir1/dir2/file.cpp b/dir1/dir2/file.cpp
@@ -47,6 +47,7 @@ <some function name>
@@ -97,7 +98,7 @@ <another functon name>
Das Extrahieren der Dateien und der geänderten Zeilen ist etwas aufwendiger:
for /f "tokens=3,4* delims=-+ " %f in ('^(git diff -p --stat .^) ^| findstr ^"@@ --git^"') do @echo %f
a/dir1/dir2/file.cpp
47,7
98,7
Ein git version 2.17.1
, um diesen Zweck zu erreichen , gibt es keine eingebaute Flagge .
Hier ist ein Beispielbefehl zum Herausfiltern des Dateinamens und der Zeilennummern aus einem einheitlichen Diff:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
Zum Beispiel das einheitliche Diff:
$ git diff --unified=0
diff --cc foobar
index b436f31,df63c58..0000000
--- a/foobar
+++ b/foobar
@@@ -1,2 -1,2 +1,6 @@@ Line abov
++<<<<<<< HEAD
+bar
++=======
+ foo
++>>>>>>> Commit message
Wird darin enden, dass:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
So passen Sie die Ausgabe von Befehlen in allgemeinen Grep-Übereinstimmungsergebnissen an:
$ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )| @@@.*' | sed -e '0~3{s/ @@@[ ]\?//}' | sed '2~3 s/$/\n1/g' | sed "N;N;N;s/\n/:/g"
foobar:1:1:Line abov
grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )
: Dateiname von diff --cc <filename>
OR abgleichen Zeilennummer von @@@ <from-file-range> <from-file-range> <to-file-range>
OR abgleichen Restlichen Text nachher abgleichen @@@
.sed -e '0~3{s/ @@@[ ]\?//}'
: Entfernen Sie @@@[ ]\?
aus jeder dritten Zeile, um den optionalen 1-Zeilen-Kontext zu erhalten ++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
: Fügen Sie \n1
alle 3 Zeilen zwischen der 2. und 3. Zeile für die Spaltennummer hinzu.sed "N;N;N;s/\n/:/g"
: Verbinde alle 3 Zeilen mit a :
.Ich benutze grep
als naive Lösung.
$ git diff | grep -A2 -- '---'
ein Ausgabebeispiel:
--- a/fileA.txt
+++ b/fileA.txt
@@ -0,0 +1,132 @@
--
--- a/B/fileC.txt
+++ b/B/fileC.txt
@@ -33663,3 +33663,68800 @@ word_38077.png,Latin
--
--- a/D/fileE.txt
+++ b/D/fileE.txt
@@ -17998,3 +17998,84465 @@ word_23979.png,Latin
--
--- a/F
+++ b/F
@@ -1 +1 @@
Vielleicht können Sie eine farbige Ausgabe sehen. Es hilft Ihnen, Ausgaben einfach zu lesen.