क्या गिट शो लाइनों को जोड़ने, लाइनों को बदलने और लाइनों को हटाने का एक तरीका है?


110

"git diff --stat" और "git log --stat" शो आउटपुट जैसे:

$ git diff -C --stat HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07
 app/controllers/application_controller.rb |   34 +++-------------------------
 1 files changed, 4 insertions(+), 30 deletions(-)

लेकिन उस कमिट में वास्तव में क्या हुआ था कि 4 लाइनों को बदल दिया गया था और 26 लाइनों को हटा दिया गया था जो कि 4 लाइनों को जोड़ने और 30 को हटाने से अलग है।

क्या डेल्टा एलओसी प्राप्त करने का कोई तरीका है (इस मामले में 26)? मैं वास्तव में लाइनों को हटाने या हटाने के बीच अंतर करने के बारे में परवाह नहीं करता हूं।

जवाबों:


127

आप उपयोग कर सकते हैं:

git diff --numstat

संख्यात्मक भिन्न जानकारी प्राप्त करने के लिए।

जहाँ तक जोड़ और हटाए गए जोड़े से संशोधन को अलग --word-diffकरने में मदद मिल सकती है। आप कुछ इस तरह की कोशिश कर सकते हैं:

MOD_PATTERN='^.+(\[-|\{\+).*$' \
ADD_PATTERN='^\{\+.*\+\}$' \
REM_PATTERN='^\[-.*-\]$' \
git diff --word-diff --unified=0 | sed -nr \
    -e "s/$MOD_PATTERN/modified/p" \
    -e "s/$ADD_PATTERN/added/p" \
    -e "s/$REM_PATTERN/removed/p" \
    | sort | uniq -c

यह थोड़ा लंबा-चौड़ा है, इसलिए आप इसे अपनी स्क्रिप्ट में पार्स करना चाहते हैं।


2
धन्यवाद quornian लेकिन numstat बिल्कुल वैसी ही जानकारी देता है जैसे कि स्टेट, जोड़ और विलोपन।
जुआन अलोंसो

एक उदाहरण का उपयोग शामिल करने के लिए मेरे उत्तर को अपडेट किया --word-diff। यह अधिक उपयोगी हो सकता है।
क्वोर्नियन

14
का आउटपुट git diff --numstatफ़ाइल से टूट गया है। अंतर के लिए कुल जोड़े गए / हटाए गए को देखने के लिए, आप इसे जागने के लिए पाइप कर सकते हैं:git diff --numstat | awk '{ added += $1; removed += $2 } END { print "+" added " -" removed }'
ह्यूजेस

15
@hughes समान जानकारी प्राप्त करने का एक सरल तरीका होगा git diff --shortstat। मेरे अनुभव में यह आउटपुट को संचित करने के बराबर है git diff --numstat
klaus triendl

1
इसके अलावा FWIW मंचन परिवर्तन के लिए आंकड़े देखने के लिए, बस जोड़ें--cached
xlm

65
  1. यदि आप आईडी के साथ कमिट द्वारा जोड़ / बदल / हटाए गए लाइनों को जानना चाहते हैं commit-id, तो आप उपयोग कर सकते हैं

    git show commit-id --stat
    

    या

    git diff commit-id-before commit-id --stat
    
  2. यदि आप एक सीमा के द्वारा लाइनों को जोड़ा / परिवर्तित / हटाए जाने के लिए जानते हैं, तो आप उपयोग कर सकते हैं

    git diff commit-id1 commit-id2 --stat
    
  3. यदि आप प्रत्येक कमेटी द्वारा जोड़ी गई लाइनों को बदलना / बदलना / हटाना चाहते हैं, तो आप उपयोग कर सकते हैं

    git log --stat
    

यह समाधान इस सवाल का जवाब नहीं देता है, "git --stat" एक एकल पंक्ति को "1 सम्मिलन और 1 विलोपन" के रूप में गिनता है। सवाल पूछता है कि "1 बदला हुआ" कैसे प्राप्त किया जाए।
जुआन अलोंसो

6

अगर आपकी सभी फाइलें --numstatइस तरह से देखने के लिए प्रतिबद्ध हैं, तो :

git diff --numstat HEAD~

4

git "यूनिफाइड" डिफरेंट का उपयोग करता है, जिसने केवल डिफरेंट फॉर्मेट के रूप में लाइनों को जोड़ा और डिलीट किया है। आपको एक अंतर पाने के लिए कुछ बाहरी करना होगा जो जानकारी को जोड़ना, हटाना और बदलना दिखाता है।

https://wiki.postgresql.org/wiki/Working_with_Git#Context_diffs_with_Git एक ऐसी स्क्रिप्ट के लिंक देता है, जो नियमित रूप से पुराने "डिफरेंशियल" को चलाने की अनुमति देती है - और इससे आप एक "संदर्भ" भिन्न आउटपुट उत्पन्न कर सकते हैं । प्रसंग अलग-अलग दिखाया गया है, हटाए गए, और परिवर्तित लाइनों, जो आपको इच्छित डेटा प्राप्त करने की अनुमति चाहिए।


3

आप diffstatसंशोधित लाइनों की संख्या दिखाने के लिए उपयोग कर सकते हैं । उदाहरण के लिए:

git diff HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07 | diffstat -C -m

-Cविकल्प रंगीन उत्पादन प्राप्त करने के लिए है, -mविकल्प संशोधित लाइनों की संख्या को दिखाने के लिए है। नमूना उत्पादन:

 app/controllers/application_controller.rb |   30 -------------------!!!
 1 files changed, 0 insertions(+), 26 deletions(-), 4 modifications(!)

जैसा man diffstatकि कहा गया है कि संशोधित लाइनों की संख्या अनुमानित है :

-m मर्ज सम्मिलित / प्रत्येक पैच फ़ाइल की "हिस्सा" से हटाने की गिनती के संशोधित लाइनों की गिनती अनुमान लगाने के लिए।

के बीच एक प्रमुख अंतर git diff --statऔर diffstat: diffstatफ़ाइल चालें / नाम (जैसे app/{a.rb => b.rb}) नहीं दिखाता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.