2012-03-29 10 views
42

"Git diff --stat" और "Git लॉग --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) प्राप्त करने का कोई तरीका है? मुझे वास्तव में जोड़े गए या हटाए गए लाइनों के बीच अंतर करने की परवाह नहीं है।

उत्तर

45

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

git diff --numstat 

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

जहां तक ​​एक जोड़ और संशोधन जोड़ी से संशोधन को अलग करता है, --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 

यह एक छोटे से घना ताकि आप अपने लिपि में यह बजाय पार्स करने के लिए कर सकते हैं।

+0

धन्यवाद quornian चाहते हैं, लेकिन वास्तव में numstat स्टेट, परिवर्धन और विलोपन के रूप में ही की जानकारी देता है । –

+0

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

+0

धन्यवाद! आपका संपादित उत्तर बहुत अच्छा है। मैं देखना चाहता था कि दो विशिष्ट प्रतिबद्धताओं के बीच कितनी लाइनें जोड़ दी गई/संशोधित/हटा दी गईं। अन्य लोगों के लिए जो ऐसा करना चाहें, बस शाखा नामों को कमांड में रखें, जैसे: 'git diff commit1 commit 2 --वर्ड-diff ...' जहां प्रतिबद्ध 1/2 SHA1, शाखाएं, टैग आदि हैं .. –

1

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

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

13
  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 
    
संबंधित मुद्दे