Pertanyaan ini membutuhkan "nomor baris", jika Anda tidak peduli dengan nomor baris dalam output, lihat pertanyaan dan jawaban ini .
Pada dasarnya, saya tidak ingin melihat konten yang diubah, hanya nama file dan nomor baris.
Pertanyaan ini membutuhkan "nomor baris", jika Anda tidak peduli dengan nomor baris dalam output, lihat pertanyaan dan jawaban ini .
Pada dasarnya, saya tidak ingin melihat konten yang diubah, hanya nama file dan nomor baris.
Jawaban:
Catatan: jika Anda hanya mencari nama-nama file berubah ( tanpa yang nomor baris untuk baris yang berubah), yang mudah, klik tautan ini untuk jawaban lain di sini .
Tidak ada opsi bawaan untuk ini (dan saya juga berpikir itu tidak begitu berguna), tetapi memang demikian mungkin untuk melakukan ini di git, dengan bantuan sebuah script "diff eksternal".
Ini yang jelek; itu terserah Anda untuk memperbaiki output seperti yang Anda inginkan.
#! /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 '^[<>-]'
Untuk perincian tentang "perbedaan eksternal" lihat deskripsi GIT_EXTERNAL_DIFF
di halaman manual git (sekitar baris 700, cukup dekat sampai akhir).
| grep -o '^[0-9]*'
memberi Anda hanya angka, dengan asumsi Anda tidak peduli dengan sisi kanan.
--diff-filter=...
mana ...
bagian itu adalah jenis perubahan yang ingin Anda lihat: M
untuk dimodifikasi, A
untuk ditambahkan, D
untuk dihapus, dan lain-lain sesuai git diff
dokumentasi.
Begitu mudah:
git diff --name-only
Majulah dan berbeda!
git diff --name-only master..HEAD
Nomor baris seperti dalam jumlah baris yang diubah atau nomor baris aktual yang mengandung perubahan? Jika Anda ingin jumlah baris yang diubah, gunakan git diff --stat
. Ini memberi Anda tampilan seperti ini:
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
Tidak ada opsi untuk mendapatkan nomor baris perubahan itu sendiri.
git diff master --compact-summary
Output adalah:
src/app/components/common/sidebar/toolbar/toolbar.component.html | 2 +-
src/app/components/common/sidebar/toolbar/toolbar.component.scss | 2 --
Inilah yang Anda butuhkan. Format yang sama seperti ketika Anda membuat komit atau menarik komit baru dari jarak jauh.
PS: Ada kabel sehingga tidak ada yang menjawab seperti ini.
1) Favorit saya:
git diff --name-status
Letakkan status file, misalnya:
A new_file.txt
M modified_file.txt
D deleted_file.txt
2) Jika Anda ingin statistik, maka:
git diff --stat
akan menampilkan sesuatu seperti:
new_file.txt | 50 +
modified_file.txt | 100 +-
deleted_file | 40 -
3) Akhirnya, jika Anda benar-benar hanya menginginkan nama file:
git diff --name-only
Hanya akan menunjukkan:
new_file.txt
modified_file.txt
deleted_file
Memperlihatkan nama file dan jumlah / jumlah baris yang berubah di setiap file antara sekarang dan komit yang ditentukan:
git diff --stat <commit-hash>
Saya tahu ini adalah pertanyaan lama tetapi pada Windows, ini memfilter keluaran git ke file dan mengubah nomor baris:
(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>
Untuk mengekstrak file dan baris yang diubah dari itu adalah pekerjaan yang sedikit lebih:
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
Nyala git version 2.17.1
, tidak ada bendera bawaan untuk mencapai tujuan ini.
Berikut ini contoh perintah untuk memfilter nama file dan nomor baris dari diff terpadu:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
Misalnya, perbedaan terpadu:
$ 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
Akan menghasilkan:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
Untuk mencocokkan output dari perintah dalam hasil pencocokan grep yang umum:
$ 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]+)? )
: Cocokkan nama file dari diff --cc <filename>
ATAU nomor baris Cocokkan dari @@@ <from-file-range> <from-file-range> <to-file-range>
ATAU Cocokkan teks yang tersisa setelah @@@
.sed -e '0~3{s/ @@@[ ]\?//}'
: Hapus @@@[ ]\?
dari setiap baris ke-3 untuk mendapatkan konteks 1 baris opsional sebelumnya++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
: Menambahkan \n1
setiap 3 baris antara baris 2 dan 3 untuk nomor kolom.sed "N;N;N;s/\n/:/g"
: Gabung setiap 3 baris dengan a :
.Saya gunakan grep
sebagai solusi naif.
$ git diff | grep -A2 -- '---'
contoh keluaran:
--- 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 @@
Mungkin Anda bisa melihat keluaran berwarna. Ini membantu Anda untuk membaca output dengan mudah.