वर्तमान और अंतिम संस्करण के बीच अंतर खोजना


670

Git का उपयोग करके, आप वर्तमान और अंतिम संस्करण के बीच अंतर कैसे पा सकते हैं?

git diff last version:HEAD

1
यदि आप अपने रेपो के क्लाउड लोकेशन के लिए GitHub का उपयोग करते हैं तो यह बहुत सरल है: अपनी परियोजना पर नेविगेट करें और अपनी परियोजना को प्रदर्शित करने वाली तालिका "शीर्षक" पर क्लिक करें
डेविड लुंडक्विस्ट

1
"वर्तमान और अंतिम संस्करण" का अर्थ वास्तव में प्रश्न में स्पष्ट किया जाना चाहिए।
faintsignal

जवाबों:


1170

मैं वास्तव में "अंतिम संस्करण" का अर्थ नहीं समझता।

जैसा कि पिछली प्रतिबद्धता को HEAD ^ के साथ एक्सेस किया जा सकता है, मुझे लगता है कि आप कुछ इस तरह की तलाश कर रहे हैं:

git diff HEAD^ HEAD

Git 1.8.5 के रूप में, के @लिए एक उपनाम हैHEAD , तो आप उपयोग कर सकते हैं:

git diff @~..@

निम्नलिखित भी काम करेगा:

git show

यदि आप सिर और किसी भी प्रतिबद्ध के बीच अंतर जानना चाहते हैं:

git diff commit_id HEAD

और यह आपके विज़ुअल डिफ टूल (यदि कॉन्फ़िगर किया गया है) को लॉन्च करेगा:

git difftool HEAD^ HEAD

चूँकि HEAD की तुलना डिफ़ॉल्ट है आप इसे छोड़ सकते हैं (जैसा कि ओरिएंट ने बताया है ):

git diff @^
git diff HEAD^
git diff commit_id

चेतावनी

  • @ScottF और @Panzercrisis टिप्पणियों में समझाते हैं कि विंडोज पर ~इसके बजाय चरित्र का उपयोग किया जाना चाहिए ^

मैं इसके पहले प्रतिबद्ध संस्करण और संस्करण जैसा कुछ चाहता था ... git diff हेड हेड -1
राजीव

7
Git 1.8.5 के रूप में, के @लिए एक उपनाम है HEAD। और क्योंकि ~और ^जब केवल एक ही कर रहे हैं जा रहा वापस करने, मुझे लगता है git diff @~..@बहुत टाइप करने के लिए आसान।
एंड्रयू

80
@ git showऔर फिर भी आसान है, क्योंकि @~..@डिफ़ॉल्ट चीज़ दिखाना है।
अमलॉय

3
git showकेवल प्रतिबद्ध संदेश प्रिंट करता है, यह कम से कम Git 2.5.4 (Apple Git-61) में विशिष्ट परिवर्तनों के एक आउटपुट को आउटपुट नहीं करता है, इसलिए यह वास्तव में ओपी के सवाल का जवाब नहीं होगा।
user1944491

1
इसके साथ समस्या git showयह है कि यदि HEADकोई मर्ज कमिट है तो आपको वह नहीं मिलेगा जो आप मर्ज करते हैं क्योंकि मर्ज कमिट में खुद कोई बदलाव नहीं हो सकता है। git diff HEAD^ HEADसंस्करणों के बीच वास्तविक परिवर्तन दिखाएंगे
रुबेनलागुना

158

"वर्तमान संस्करण" मानकर काम करने वाली निर्देशिका (अप्राप्त संशोधनों) और "अंतिम संस्करण" HEAD(वर्तमान शाखा के लिए अंतिम प्रतिबद्ध संशोधन) है, बस करो

git diff HEAD

निम्नलिखित का श्रेय उपयोगकर्ता को जाता है Cerran

और अगर आप हमेशा स्टेजिंग क्षेत्र को छोड़ते हैं -aजब आप प्रतिबद्ध होते हैं, तो आप बस उपयोग कर सकते हैं git diff

सारांश

  1. git diff अस्थिर परिवर्तन दिखाता है।
  2. git diff --cached मंचन परिवर्तन दिखाता है।
  3. git diff HEAD सभी परिवर्तन दिखाता है (दोनों मंचन और अस्थिर)।

स्रोत: git-diff (1) मैनुअल पेज - सेरन


16
और यदि आप हमेशा स्टेजिंग क्षेत्र को छोड़ते हैं -aजब आप प्रतिबद्ध होते हैं, तो आप बस उपयोग कर सकते हैं git diff। <1> अस्थिर परिवर्तन git diffदिखाता है । <2> चरणबद्ध परिवर्तन दिखाता है । <3> शो सभी परिवर्तन (मंचन किया और unstaged)। स्रोत: git-diff (1) मैनुअल पेजgit diff --cachedgit diff HEAD
सेरन

1
यह स्वीकृत उत्तर होना चाहिए क्योंकि यह प्रश्न के इरादे का उत्तर देता है।
tgoneil

Git में "वर्तमान अस्थिर संस्करण" का नाम क्या है? क्या वास्तव में कोई नाम है?
मथिउ CAROFF

118

जैसा कि अमलॉय द्वारा एक टिप्पणी पर कहा गया है , यदि "वर्तमान और अंतिम संस्करण" से आपका मतलब है कि अंतिम प्रतिबद्धता और उससे पहले की प्रतिबद्धता, आप बस उपयोग कर सकते हैं

git show

5
यह वही है जिसे मैं देख रहा था। बहुत बढ़िया जवाब।
कोडमनिंक

12
पुराने कमिट्स के लिए git show HEAD~1अंतिम-लेकिन-एक कमिट और git show HEAD~2आदि दिखाने के लिए उपयोग करें । के माध्यम से सिर्फ एक फ़ाइल दिखाएं git show HEAD~2 my_file
फ्लोरियन ब्रूकर

60

अंतिम लेकिन एक प्रतिबद्ध और अंतिम प्रतिबद्ध (प्लस वर्तमान स्थिति, यदि कोई हो) के बीच अंतर:

git diff HEAD~

या यहां तक ​​कि (टाइप करने में आसान)

git diff @~

जहां @के लिए synonim है HEADवर्तमान शाखा और का ~अर्थ है "मुझे उल्लेख संशोधन की मूल दे"।


मुझे काफी पसंद है git diff HEAD^ (समतुल्य HEAD~रूप के बजाय )। यह अपने आप की तरह एक "पुराने git" के लिए याद करने में आसान है ;-)
sxc731

3
कुछ टर्मिनलों में गाजर एक मुद्दा है। विकल्प अच्छा लगा
light24bulbs

1
उत्तर यह बताकर सुधारा जा सकता था कि क्या ~@इसका और मतलब है है।
बॉब स्टीन

1
अगर हम केवल यह जांचना चाहते हैं कि अंतिम प्रतिबद्ध में क्या किया गया है, तो इसका उपयोग न करें (जैसा कि गंदे बदलाव इस प्रभाव को प्रभावित करते हैं)। एक छोटे वाक्यविन्यास वास्तव में diff HEAD^ HEADहोना चाहिए git diff @^!। देखें git-scm.com/docs/gitrevisions के लिएr1^!
जॉनी वोंग

@JohnnyWong स्पष्टीकरण के लिए धन्यवाद। मैंने पाठकों को भ्रमित न करने के लिए "वर्तमान स्थिति" का उल्लेख किया।
टोमिलोव अनातोली

53

आप इसे इस तरह भी कर सकते हैं:

पिछले प्रतिबद्ध के साथ तुलना करें

git diff --name-status HEAD~1..HEAD

वर्तमान और पिछले दो के साथ तुलना करें

git diff --name-status HEAD~2..HEAD

16

cachedयदि आपने जोड़ा है तो बस ध्वज का उपयोग करें , लेकिन अभी तक प्रतिबद्ध नहीं है:

git diff --cached --color

1
यह वही था जिसकी मुझे तलाश थी जब मुझे यह प्रश्न मिला। धन्यवाद!
विलियम रोजर्स

7

त्वरित और सरल, यह मानते हुए कि आप गुरु में हैं:

    git diff (checkout_id):file.txt file.txt

उदाहरण:

    git diff asdfioei91819280din198:file.txt file.txt

4

सबसे पहले, उपयोग करें "git log रिपॉजिटरी के लॉग को सूचीबद्ध करने के लिए " का ।

अब, दो प्रतिबद्धों से संबंधित, दो प्रतिबद्ध आईडी का चयन करें। आप अंतर देखना चाहते हैं ( उदाहरण - शीर्ष सबसे प्रतिबद्ध और कुछ पुरानी प्रतिबद्ध (वर्तमान-संस्करण और कुछ पुराने संस्करण की आपकी अपेक्षा के अनुसार) )।

अगला, उपयोग करें:

git diff <commit_id1> <commit_id2>

या

git difftool <commit_id1> <commit_id2>

3

यदि शीर्ष प्रतिबद्ध को HEAD द्वारा इंगित किया जाता है तो आप ऐसा कुछ कर सकते हैं:

commit1 -> HEAD
commit2 -> HEAD~1
commit3 -> HEAD~2

पहले और दूसरे कमिट के बीच का अंतर:

git diff HEAD~1 HEAD

पहले और तीसरे वचन के बीच का अंतर:

git diff HEAD~2 HEAD

दूसरे और तीसरे वचन के बीच का अंतर:

git diff HEAD~2 HEAD~1

और इसी तरह...


2

मैं का उपयोग Bitbucket साथ ग्रहण ग्रहण के साथ आईडीई EGit प्लग इन इंस्टॉल।

मैं इसके इतिहास के किसी भी संस्करण (जैसे SVN ) की फ़ाइल की तुलना करता हूं ।

मेनू प्रोजेक्ट एक्सप्लोरर → फ़ाइल → राइट क्लिक → टीमइतिहास में दिखाएँ

यह उस फ़ाइल पर सभी परिवर्तनों का इतिहास लाएगा। अब Ctrlक्लिक करें और किसी भी दो संस्करणों का चयन करें → "एक दूसरे के साथ तुलना करें"


2

यह टैग के लिए भी काम करेगा (नीचे 'यूनीक को हटा दें और यदि आपको सभी परिवर्तन देखने की आवश्यकता हो तो अन्य भाग):

 git diff v1.58 HEAD 

नीचे एक ही है, और एक अखंड भंडार में माइक्रोसर्विस के लिए निरंतर एकीकरण (CI) के लिए उपयोगी हो सकता है:

git diff v1.58 HEAD  --name-only | sort -u | awk 'BEGIN {FS="/"} {print $1}' | uniq
<Folder Name> 

(क्रेडिट - https://dzone.com/articles/build-test-and-deploy-apps-independently-from-a-mo )

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