คำถามนี้เรียกร้องให้ "หมายเลขบรรทัด" ถ้าคุณไม่สนใจเกี่ยวกับหมายเลขบรรทัดในผลลัพธ์ดูคำถามและคำตอบนี้
โดยพื้นฐานแล้วฉันไม่ต้องการเห็นเนื้อหาที่มีการเปลี่ยนแปลงเพียงแค่ชื่อไฟล์และหมายเลขบรรทัด
คำถามนี้เรียกร้องให้ "หมายเลขบรรทัด" ถ้าคุณไม่สนใจเกี่ยวกับหมายเลขบรรทัดในผลลัพธ์ดูคำถามและคำตอบนี้
โดยพื้นฐานแล้วฉันไม่ต้องการเห็นเนื้อหาที่มีการเปลี่ยนแปลงเพียงแค่ชื่อไฟล์และหมายเลขบรรทัด
คำตอบ:
หมายเหตุ: หากคุณได้เพียงแค่มองหาชื่อของไฟล์ที่มีการเปลี่ยนแปลง ( โดยไม่ต้องหมายเลขบรรทัดสำหรับสายที่มีการเปลี่ยนแปลง) ที่ง่ายต่อคลิกที่ลิงค์นี้เพื่อคำตอบที่นี่อีก
ไม่มีตัวเลือกในตัวสำหรับสิ่งนี้ (และฉันไม่คิดว่ามันมีประโยชน์อย่างใดอย่างหนึ่ง) แต่ก็เป็นไปได้ที่จะทำสิ่งนี้ในคอมไพล์ด้วยความช่วยเหลือของสคริปต์ "external diff"
นี่คือสิ่งที่ค่อนข้างเส็งเคร็ง; มันจะขึ้นอยู่กับคุณในการแก้ไขเอาต์พุตในแบบที่คุณต้องการ
#! /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 '^[<>-]'
สำหรับรายละเอียดเกี่ยวกับ "ความแตกต่างภายนอก" โปรดดูคำอธิบายGIT_EXTERNAL_DIFF
ในหน้าคู่มือ git (ประมาณบรรทัดที่ 700 ซึ่งอยู่ใกล้กับจุดสิ้นสุด)
| grep -o '^[0-9]*'
ให้คุณได้ตัวเลขเพียงอย่างเดียวสมมติว่าคุณไม่สนใจทางด้านขวา
--diff-filter=...
ที่...
ส่วนหนึ่งเป็นชนิดของการเปลี่ยนแปลงที่คุณต้องการที่จะเห็น: M
สำหรับการแก้ไขA
สำหรับเพิ่มD
สำหรับลบและอื่น ๆ ตามgit diff
เอกสาร
ง่ายมาก:
git diff --name-only
ออกไปและแตกต่าง!
git diff --name-only master..HEAD
หมายเลขบรรทัดในจำนวนบรรทัดที่เปลี่ยนแปลงหรือหมายเลขบรรทัดจริงที่มีการเปลี่ยนแปลงหรือไม่ git diff --stat
หากคุณต้องการจำนวนของสายการเปลี่ยนแปลงการใช้ สิ่งนี้จะแสดงผลดังนี้:
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
ไม่มีตัวเลือกในการรับหมายเลขบรรทัดของการเปลี่ยนแปลงด้วยตนเอง
git diff master --compact-summary
ผลลัพธ์คือ:
src/app/components/common/sidebar/toolbar/toolbar.component.html | 2 +-
src/app/components/common/sidebar/toolbar/toolbar.component.scss | 2 --
นี่คือสิ่งที่คุณต้องการ รูปแบบเดียวกับเมื่อคุณทำการคอมมิทหรือดึงคอมมิทใหม่จากรีโมต
PS: มันมีสายที่ไม่มีใครตอบแบบนี้
1)ฉันชอบ:
git diff --name-status
ผนวกสถานะไฟล์เช่น:
A new_file.txt
M modified_file.txt
D deleted_file.txt
2)ถ้าคุณต้องการสถิติจากนั้น:
git diff --stat
จะแสดงสิ่งที่ชอบ:
new_file.txt | 50 +
modified_file.txt | 100 +-
deleted_file | 40 -
3)สุดท้ายถ้าคุณต้องการชื่อไฟล์เท่านั้น:
git diff --name-only
จะแสดงเพียง:
new_file.txt
modified_file.txt
deleted_file
แสดงชื่อไฟล์และจำนวน / จำนวนของบรรทัดที่เปลี่ยนแปลงในแต่ละไฟล์ระหว่างตอนนี้และการคอมมิทที่ระบุ:
git diff --stat <commit-hash>
ฉันรู้ว่านี่เป็นคำถามเก่า แต่ใน Windows นี้กรองผลลัพธ์ git ไปยังไฟล์และหมายเลขบรรทัดที่เปลี่ยนแปลง:
(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>
หากต้องการแตกไฟล์และบรรทัดที่เปลี่ยนแปลงจากนั้นจะทำงานได้อีกเล็กน้อย:
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
ผลลัพธ์ที่สะอาดที่สุดคือชื่อไฟล์ / เส้นทางเท่านั้นที่มาพร้อมกับ
git diff-tree --no-commit-id --name-only -r
HTH
เมื่อวันที่git version 2.17.1
, มีไม่ได้ในตัวธงเพื่อให้บรรลุวัตถุประสงค์นี้
ต่อไปนี้เป็นคำสั่งตัวอย่างเพื่อกรองชื่อไฟล์และหมายเลขบรรทัดจากส่วนต่างที่รวม:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
ตัวอย่างเช่น 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
จะส่งผลให้:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
ในการจับคู่เอาต์พุตของคำสั่งในผลลัพธ์การจับคู่ 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]+)? )
: ตรงกับชื่อไฟล์จากdiff --cc <filename>
หมายเลขบรรทัดหรือการแข่งขันจากหรือการแข่งขันที่เหลืออยู่หลังจากข้อความ@@@ <from-file-range> <from-file-range> <to-file-range>
@@@
sed -e '0~3{s/ @@@[ ]\?//}'
: เอาออก@@@[ ]\?
จากบรรทัดที่ 3 ทุกคนที่จะได้รับบริบทสาย 1 ++<<<<<<< HEAD
ตัวเลือกก่อนsed '2~3 s/$/\n1/g'
: เพิ่ม\n1
ทุก 3 บรรทัดระหว่างบรรทัดที่ 2 และ 3 สำหรับหมายเลขคอลัมน์sed "N;N;N;s/\n/:/g"
: เข้าร่วมทุก 3 :
สายด้วยฉันใช้grep
เป็นโซลูชั่นไร้เดียงสา
$ git diff | grep -A2 -- '---'
ตัวอย่างผลลัพธ์:
--- 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 @@
บางทีคุณอาจเห็นผลสี ช่วยให้คุณอ่านเอาต์พุตได้อย่างง่ายดาย