एक उपनाम या स्क्रिप्ट लिखने के अलावा, क्या किसी विशेष प्रतिबद्ध के लिए अंतर प्राप्त करने के लिए एक छोटी कमांड है?
git diff 15dc8^..15dc8
यदि आप केवल सिंगल कमिट आईडी देते हैं git diff 15dc8
, तो यह अलग है कि हेड के खिलाफ प्रतिबद्ध है।
एक उपनाम या स्क्रिप्ट लिखने के अलावा, क्या किसी विशेष प्रतिबद्ध के लिए अंतर प्राप्त करने के लिए एक छोटी कमांड है?
git diff 15dc8^..15dc8
यदि आप केवल सिंगल कमिट आईडी देते हैं git diff 15dc8
, तो यह अलग है कि हेड के खिलाफ प्रतिबद्ध है।
जवाबों:
का उपयोग करें git show $COMMIT
। यह आपको कमिट के लिए लॉग संदेश दिखाएगा, और उस विशेष कमिट का अंतर।
उपयोग:
git diff 15dc8^!
जैसा कि git-Rev-parse (1) manpage (या आधुनिक git grerevisions (7) manpage) में निम्नलिखित अंश में वर्णित है :
एक कमेटी के गठन के लिए दो अन्य आशुलिपि जो एक कमेटी द्वारा बनाई गई हैं और इसके माता-पिता मौजूद हैं। R1 ^ @ संकेतन का अर्थ है r1 के सभी माता-पिता। r1 ^! इसमें r1 शामिल है, लेकिन इसके सभी माता-पिता को शामिल नहीं किया गया है।
इसका मतलब यह है कि आप जीआईटी में 15dc8^!
एक शॉर्टहैंड के रूप में उपयोग कर सकते हैं 15dc8^..15dc8
जहां संशोधन की आवश्यकता होती है। के लिए diff आदेश git diff 15dc8^..15dc8
के रूप में समझा जाता है git diff 15dc8^ 15dc8
, जो (प्रतिबद्ध की मूल के बीच अंतर का मतलब है 15dc8^
) और प्रतिबद्ध ( 15dc8
)।
नोट : git-rev-parse(1)
मैनपेज में विवरण संशोधन श्रेणियों के बारे में बात करता है , जहां इसे एक से अधिक माता-पिता के साथ मर्ज करने के लिए भी काम करने की आवश्यकता होती है। फिर r1^!
" r1 --not r1^@
" अर्थात " r1 ^r1^1 ^r1^2 ...
" है
इसके अलावा, आप git show COMMIT
प्रतिबद्ध विवरण प्राप्त करने और कमिट के लिए अलग-अलग उपयोग कर सकते हैं । यदि आप केवल अंतर चाहते हैं, तो आप उपयोग कर सकते हैंgit diff-tree -p COMMIT
^!
माता-पिता आशुलिपि संकेतन सामान्य प्रतिबद्ध के लिए difftool के साथ ठीक से काम करता है लेकिन diff मर्ज प्रतिबद्ध के लिए उलट है। ऐसा क्यों?
यदि आप जानते हैं कि कितनी दूर है, तो आप कुछ इस तरह की कोशिश कर सकते हैं:
# Current branch vs. parent
git diff HEAD^ HEAD
# Current branch, diff between commits 2 and 3 times back
git diff HEAD~3 HEAD~2
पहले के काम कुछ इस तरह से होते हैं:
# Parent of HEAD
git show HEAD^1
# Grandparent
git show HEAD^2
ऐसे कई तरीके हैं जिनसे आप कमिट निर्दिष्ट कर सकते हैं:
# Great grandparent
git show HEAD~3
देखें जानकारी के लिए इस पेज ।
जैसा कि @mipadi बताते हैं, आप उपयोग कर सकते हैं git show $COMMIT
, लेकिन यह कुछ हेडर और प्रतिबद्ध संदेश भी दिखाता है। यदि आप एक सीधा अंतर चाहते हैं, तो उपयोग करें git show --pretty=format:%b $COMMIT
।
यह स्पष्ट रूप से बहुत छोटा हाथ नहीं है, इसलिए मैं इस उपनाम को अपने .गितकॉन्फिग में रख रहा हूं
[alias]
sd = show --pretty=format:%b
यह मुझे अलग दिखाने के लिए उपयोग git sd $COMMIT
करने में सक्षम बनाता है ।
यदि आप zsh का उपयोग कर रहे हैं और विकल्प सेट है, तो कई उल्लेखित उदाहरण (जैसे git diff 15dc8^!
, या git diff 15dc8^..15dc8
) काम नहीं करते हैं extendedglob
। आप इसे निम्नलिखित तीन तरीकों में से एक द्वारा ठीक कर सकते हैं:
unsetopt extendedglob
(और / या इसे .zshrc से हटा दें)
setopt NO_NOMATCH
(और / या इसे .zshrc में सेट करें)
बैकस्लैश के साथ हर बार कैरेट और बैंग से बचकर रहें, जैसे git diff 15dc8\^\!
git diff 15dc8 15dce~1
~ 1 का अर्थ है 'जनक', ~ 2 'दादा-दादी, आदि।
उपर्युक्त पॉल का समाधान वह था जो मैं उम्मीद कर रहा था कि यह होगा।
$ git diff HEAD^1
इसके अलावा, यह उल्लिखित की तरह उपनाम जोड़ने के लिए उपयोगी है, यदि आप अपनी ~ / .gitconfig फ़ाइल के [alias] अनुभाग में निम्नलिखित डालते हैं तो आप सिर और पिछले के बीच अंतर देखने के लिए शॉर्ट-हैंड का उपयोग कर सकते हैं।
[alias]
diff-last = diff HEAD^1
फिर $ git diff-last चलाने से आपको अपना परिणाम मिल जाएगा। ध्यान दें कि इसमें आपके द्वारा अभी भी किए गए परिवर्तनों के साथ-साथ कमिट के बीच का अंतर भी शामिल होगा । यदि आप उन परिवर्तनों को अनदेखा करना चाहते हैं जो आपने अभी तक नहीं किए हैं, तो आप HEAD की तुलना इसके माता-पिता से सीधे करने के लिए पर्याप्त उपयोग कर सकते हैं:
$ git diff HEAD^1 HEAD
उपनामों का उपयोग करता है, इसलिए आपके प्रश्न का ठीक-ठीक उत्तर नहीं देता है, लेकिन जो आप करना चाहते हैं उसे करने के लिए मुझे ये उपयोगी लगते हैं ...
alias gitdiff-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitlog-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"