To pytanie wymaga „numerów linii”, jeśli nie przejmujesz się numerami linii na wyjściu, zobacz to pytanie i odpowiedź .
Zasadniczo nie chcę widzieć zmienionej zawartości, tylko nazwy plików i numery linii.
To pytanie wymaga „numerów linii”, jeśli nie przejmujesz się numerami linii na wyjściu, zobacz to pytanie i odpowiedź .
Zasadniczo nie chcę widzieć zmienionej zawartości, tylko nazwy plików i numery linii.
Odpowiedzi:
Uwaga: jeśli jesteś po prostu patrząc na nazwiska zmienionych plików ( bez tych numerów linii do linii, które zostały zmienione), który jest łatwy, kliknij ten link do innej odpowiedzi tutaj .
Nie ma wbudowanej opcji do tego (i nie sądzę, że to wszystko, co przydatne, albo), ale to jest możliwe, aby zrobić to w git, z pomocą „zewnętrznym diff” skryptu.
Oto dość gówniany; od Ciebie zależy, czy naprawisz wyjście tak, jak chcesz.
#! /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 '^[<>-]'
Aby uzyskać szczegółowe informacje na temat „zewnętrznego diff”, zobacz opis GIT_EXTERNAL_DIFF
na stronie podręcznika git (około linii 700, całkiem blisko końca).
| grep -o '^[0-9]*'
daje tylko liczby, zakładając, że nie obchodzi cię prawa strona.
--diff-filter=...
gdzie ...
część jest rodzajem zmian, które chcesz zobaczyć: M
zmodyfikowane, A
dodane, D
usunięte i inne zgodnie z git diff
dokumentacją.
Tak łatwo:
git diff --name-only
Idź naprzód i różnicuj się!
git diff --name-only master..HEAD
Numery linii jak w liczbie zmienionych linii czy rzeczywiste numery linii zawierające zmiany? Jeśli chcesz liczbę zmienionych linii, użyj git diff --stat
. To daje ci taki ekran:
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
Nie ma opcji, aby uzyskać numery linii samych zmian.
git diff master --compact-summary
Dane wyjściowe to:
src/app/components/common/sidebar/toolbar/toolbar.component.html | 2 +-
src/app/components/common/sidebar/toolbar/toolbar.component.scss | 2 --
Właśnie tego potrzebujesz. Ten sam format, jak podczas dokonywania zmian lub wyciągania nowych zatwierdzeń ze zdalnego.
PS: To jest takie, że nikt nie odpowiedział w ten sposób.
1) Mój ulubiony:
git diff --name-status
Przygotowuje status pliku, np .:
A new_file.txt
M modified_file.txt
D deleted_file.txt
2) Jeśli chcesz statystyki, to:
git diff --stat
pokaże coś takiego:
new_file.txt | 50 +
modified_file.txt | 100 +-
deleted_file | 40 -
3) Wreszcie, jeśli naprawdę chcesz tylko nazwy plików:
git diff --name-only
Po prostu pokaże:
new_file.txt
modified_file.txt
deleted_file
Pokazuje nazwy plików i ilość / liczbę wierszy, które zmieniły się w każdym pliku między teraz a określonym zatwierdzeniem:
git diff --stat <commit-hash>
Wiem, że to stare pytanie, ale w systemie Windows filtruje dane wyjściowe git do plików i zmienia numery linii:
(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>
Aby wyodrębnić pliki i zmienione linie z tego, jest trochę więcej pracy:
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
On git version 2.17.1
, nie ma wbudowaną flagi , aby osiągnąć ten cel.
Oto przykładowe polecenie, aby odfiltrować nazwę pliku i numery linii ze zunifikowanego pliku różnicowego:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
Na przykład zunifikowany plik różnicowy:
$ 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
Spowoduje to:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
Aby dopasować dane wyjściowe poleceń we wspólnych wynikach dopasowania grep:
$ 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]+)? )
: Dopasuj nazwę pliku z diff --cc <filename>
LUB Dopasuj numer linii z @@@ <from-file-range> <from-file-range> <to-file-range>
LUB Dopasuj pozostały tekst po @@@
.sed -e '0~3{s/ @@@[ ]\?//}'
: Usuń @@@[ ]\?
z co 3 linii, aby wcześniej uzyskać opcjonalny kontekst 1 linii ++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
: Dodaj \n1
co 3 linie między 2. i 3. linią dla numeru kolumny.sed "N;N;N;s/\n/:/g"
: Połącz co 3 linie za pomocą :
.Używam grep
jako naiwne rozwiązanie.
$ git diff | grep -A2 -- '---'
przykład wyjściowy:
--- 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 @@
Może widzisz kolorowe wyjście. Pomaga w łatwym odczycie wyników.