यह प्रश्न "लाइन नंबरों" के लिए कहता है, यदि आप आउटपुट में लाइन नंबरों की परवाह नहीं करते हैं तो यह प्रश्न और उत्तर देखें ।
मूल रूप से, मैं परिवर्तित सामग्री नहीं देखना चाहता, बस फ़ाइल नाम और लाइन नंबर।
यह प्रश्न "लाइन नंबरों" के लिए कहता है, यदि आप आउटपुट में लाइन नंबरों की परवाह नहीं करते हैं तो यह प्रश्न और उत्तर देखें ।
मूल रूप से, मैं परिवर्तित सामग्री नहीं देखना चाहता, बस फ़ाइल नाम और लाइन नंबर।
जवाबों:
नोट: यदि आप कर रहे हैं बस नाम की तलाश में (बदल फ़ाइलों के बिना लाइन नंबर लाइनों के लिए कि बदल रहे थे), आसान है कि, एक और उत्तर यहाँ करने के लिए इस लिंक पर क्लिक करें ।
कोई अंतर्निहित है इस के लिए विकल्प (और मुझे नहीं लगता कि यह सब या तो उपयोगी है कि है), लेकिन यह है एक "बाहरी diff" स्क्रिप्ट की मदद से Git में ऐसा करने के लिए, संभव।
यहाँ एक बहुत भद्दा है; यह आप पर निर्भर करेगा कि आप आउटपुट को उस तरह से ठीक कर सकते हैं जैसा आप चाहते हैं।
#! /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
लिए गिट मैनुअल पेज (लगभग 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>
मुझे पता है कि यह एक पुराना सवाल है लेकिन विंडोज पर, यह फाइल और बदले हुए लाइन नंबरों के लिए 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 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':'
उदाहरण के लिए, एकीकृत अंतर:
$ 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/ @@@[ ]\?//}'
: @@@[ ]\?
वैकल्पिक 1 लाइन संदर्भ प्राप्त करने के लिए हर 3 लाइन से पहले निकालें ++<<<<<<< HEAD
।sed '2~3 s/$/\n1/g'
: \n1
कॉलम नंबर के लिए 2 और 3 लाइन के बीच हर 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 @@
शायद आप रंगीन आउटपुट देख सकते हैं। यह आपको आउटपुट आसानी से पढ़ने में मदद करता है।