Bu soru "satır numaraları" için çağrı yapar, eğer çıkıştaki satır numaraları ile ilgilenmezseniz bu soruya ve cevaba bakınız .
Temel olarak, değiştirilen içeriği görmek istemiyorum, sadece dosya adlarını ve satır numaralarını.
Bu soru "satır numaraları" için çağrı yapar, eğer çıkıştaki satır numaraları ile ilgilenmezseniz bu soruya ve cevaba bakınız .
Temel olarak, değiştirilen içeriği görmek istemiyorum, sadece dosya adlarını ve satır numaralarını.
Yanıtlar:
Not: eğer sadece isim arayan (değiştirilen dosyaların olmadan hat numaraları değiştirildi hatları için), kolay, burada başka bir cevap için bu bağlantıyı tıklayın .
Hiçbir Bunun seçeneği-yerleşik (ve hepsi ya kullanışlı olduğunu sanmıyorum) ama olan bir "dış fark" komut yardımıyla, GIT'de bunu yapmak mümkün.
İşte oldukça berbat biri; çıktıyı istediğiniz şekilde düzeltmek size kalmış.
#! /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 '^[<>-]'
"Dış fark" ile ilgili detaylar GIT_EXTERNAL_DIFF
için git kılavuz sayfasındaki (700. satır civarında, sonuna oldukça yakın) açıklamasına bakınız.
| grep -o '^[0-9]*'
, sağ tarafı önemsemediğinizi varsayarak size sadece rakamlar verir.
--diff-filter=...
, ...
parçanın görmek istediğiniz değişiklik türü olduğu yere ekleyin : M
değiştirilenler A
için, eklenenler D
için, silinenler ve git diff
belgeler için diğerleri .
Çok kolay:
git diff --name-only
İleri git ve fark!
git diff --name-only master..HEAD
Değiştirilen satır sayısı gibi satır numaraları veya değişiklikleri içeren gerçek satır numaraları? Değiştirilen satır sayısını istiyorsanız kullanın git diff --stat
. Bu size şöyle bir ekran verir:
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
Değişikliklerin satır numaralarını alma seçeneği yoktur.
git diff master --compact-summary
Çıktı:
src/app/components/common/sidebar/toolbar/toolbar.component.html | 2 +-
src/app/components/common/sidebar/toolbar/toolbar.component.scss | 2 --
Tam da ihtiyacınız olan şey bu. Taahhüt yaparken veya uzaktan kumandadan yeni taahhütler çekerken kullandığınız format.
PS: Kimsenin bu şekilde cevap vermemesi çok kablolu.
1) Benim favorim:
git diff --name-status
Dosya durumunu öneriyor, örneğin:
A new_file.txt
M modified_file.txt
D deleted_file.txt
2) İstatistik istiyorsanız, o zaman:
git diff --stat
şöyle bir şey gösterecek:
new_file.txt | 50 +
modified_file.txt | 100 +-
deleted_file | 40 -
3) Son olarak, gerçekten sadece dosya adlarını istiyorsanız:
git diff --name-only
Basitçe göstereceğim:
new_file.txt
modified_file.txt
deleted_file
Şimdi ile belirtilen işlem arasında her dosyada değişen dosya adlarını ve satır miktarını / nubmer'ını gösterir:
git diff --stat <commit-hash>
Bunun eski bir soru olduğunu biliyorum, ancak Windows'ta bu, git çıkışını dosyalara filtreledi ve satır numaralarını değiştirdi:
(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>
Dosyaları ve değiştirilen satırları buradan çıkarmak biraz daha fazla iştir:
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
Tarihinde git version 2.17.1
, bu amaca ulaşmak için yerleşik bir bayrak yoktur .
Birleştirilmiş bir farktan dosya adını ve satır numaralarını filtrelemek için örnek bir komut aşağıdadır:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
Örneğin, birleşik fark:
$ 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
Sonuçlanacak:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
Ortak grep eşleme sonuçlarındaki komutların çıktısını eşleştirmek için:
$ 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]+)? )
: OR'den dosya adını diff --cc <filename>
eşleştir VEYA'dan satır numarasını @@@ <from-file-range> <from-file-range> <to-file-range>
eşleştir Sonra kalan metni eşleştir @@@
.sed -e '0~3{s/ @@@[ ]\?//}'
: Daha @@@[ ]\?
önce isteğe bağlı 1 satır bağlamını elde etmek için her 3 satırdan birini kaldırın ++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
: Ekle \n1
Sütun numarası için 2. ve 3. satır arasına her 3 satırdan birini .sed "N;N;N;s/\n/:/g"
: Her 3 satıra bir ile katılın :
.grep
Saf bir çözüm olarak kullanıyorum .
$ git diff | grep -A2 -- '---'
bir çıktı örneği:
--- 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 @@
Belki renkli bir çıktı görebilirsiniz. Çıktıları kolayca okumanıza yardımcı olur.