Git कमिट में बदलाव कैसे देखें?


1545

जब मैं git diff COMMITउस कमिट और HEAD (जहाँ तक मुझे पता है) के बीच के बदलाव देख रहा हूँ, लेकिन मैं उस सिंगल कमिट द्वारा किए गए बदलावों को देखना चाहूँगा।

मुझे उस पर कोई स्पष्ट विकल्प नहीं मिला है diff/ logजो मुझे वह आउटपुट देगा।


जवाबों:


1970

किसी विशेष COMMITहैश के लिए अंतर देखने के लिए :

git diff COMMIT~ COMMITआपको उस COMMITपूर्वज और के बीच का अंतर दिखाएगा COMMIT। के लिए आदमी पृष्ठ देखें Git diff और आदेश के बारे में जानकारी के लिए gitrevisions के बारे में ~अंकन और उसके मित्र।

वैकल्पिक रूप से, git show COMMITकुछ ऐसा ही करेंगे। (कमिट का डेटा, जिसमें इसका अंतर भी शामिल है - लेकिन मर्ज कमिट के लिए नहीं।) git शो मैनपेज देखें ।


17
ध्यान दें कि ^थॉमसन और बॉर्न गोले ( |वहां के लिए पर्यायवाची ) rcऔर उसके डेरिवेटिव (कार्यवाहक संचालक) में उद्धृत किए जाने की आवश्यकता है और zshविस्तारित not
glob

3
ध्यान दें कि HEAD^यदि पहले एक माता-पिता के कई माता-पिता हैं (यानी मर्ज कमिट)।
मंसूर

23
git diff COMMIT~ COMMITमेरे लिए काम करता है, कार्यवाहक के बजाय टिल्ड को नोटिस करें। मैं विंडोज़ 10 पर git संस्करण 2.6.1.windows.1 चला रहा हूं
Juuso Ohtonen

14
@tradetree: COMMIT शब्द को कुछ प्रतिबद्ध के नाम से प्रतिस्थापित किया जाना चाहिए, जैसे SHA राशि।
निक माटेयो

91
मुझे ऐसा लगता है कि इस सवाल के लिए git show अधिक उपयुक्त है और पहले उल्लेख किया गया सुझाव होना चाहिए।
pypmannetjies

496

जैसा कि " आशुलिपि के अंतर के लिए आशुलिपि अपने माता-पिता के साथ प्रतिबद्ध है? ", आप के git diffसाथ भी उपयोग कर सकते हैं :

git diff COMMIT^!

या

git diff-tree -p COMMIT

Git शो के साथ, आपको ऐसा करने की आवश्यकता होगी (अकेले ध्यान केंद्रित करने के लिए):

git show --color --pretty=format:%b $COMMIT

COMMITपैरामीटर एक है प्रतिबद्ध-ish :

एक प्रतिबद्ध वस्तु या एक वस्तु जिसे पुनरावर्ती वस्तु के लिए पुन: संदर्भित किया जा सकता है। निम्नलिखित सभी कमिट-ईश हैं: एक कमिट ऑब्जेक्ट, एक टैग ऑब्जेक्ट जो एक कमिट ऑब्जेक्ट को इंगित करता है, एक टैग ऑब्जेक्ट जो एक टैग ऑब्जेक्ट को इंगित करता है जो एक कमिट ऑब्जेक्ट को इंगित करता है, आदि।

कमिट-ईश का संदर्भ देने के लिए gitrevision "विशिष्ट विवरण देखें "
यह भी देखें " Git में ट्री-ईश का क्या अर्थ है? "।


369

आप यह आसान तरीका भी आजमा सकते हैं:

git show <COMMIT>

2
ऐसा लगता है कि यह कुछ अलग करता है
दुखी चर

3
यह केवल प्रतिबद्ध संदेश दिखाता है। इस कमेटी के लिए लागू किए गए कोड में परिवर्तन नहीं है।
k0pernikus

1
हाँ यह करता है? हाल के गिट संस्करणों में अंत में ...
डेवी

2
यह अद्यतन सही उत्तर होना चाहिए
स्कॉट स्किल्स

1
इसका उत्तर होना चाहिए।
रोएल

77

git show सबसे हालिया प्रतिबद्ध में किए गए परिवर्तनों को दर्शाता है।

के बराबर है git show HEAD

git show HEAD~1 आपको 1 कमिट वापस लेता है।


45

मैं आमतौर पर करता हूं:

git diff HEAD~1

अंतिम प्रतिबद्ध के बारे में परिवर्तन दिखाने के लिए। यदि आपके पास अधिक कमिट्स हैं तो संख्या 1 को बढ़ाएं कि आप कितने कॉम्पटिट्स देखना चाहते हैं।


34

सबसे पहले उपयोग करते हुए कमिट आईडी प्राप्त करें,

git log #to list all

या

git log -p -1 #last one commit id

कमिट आईडी।

अब हम विशिष्ट विधि से परिवर्तनों को सूचीबद्ध करने के लिए दो तरीकों का उपयोग करते हैं,

विधि 1:

git diff commit_id^! #commit id something like this 1c6a6000asad012

विधि 2:

git show commit_id
For example: git show 1c6a600a

2
क्या ^!मतलब है ??
मार्टीन कॉल

2
^! प्रतिबद्ध के लिए आशुलिपि है .. .. जिसका अर्थ है कि सभी माता-पिता को बाहर कर देंगे और उस प्रतिबद्ध में
भिन्नता की

मैं एक विशेषज्ञ नहीं हूं, लेकिन मेरे पास एक मामला है (जिसमें कई शाखाएं शामिल हैं) जहां git log c ^ है! git log c ^ .. c के समान नहीं है। वास्तव में यह बहुत बेहतर है: git log c ^ .. c कई प्रविष्टियां सूचीबद्ध करता है जबकि git log c ^! सही काम किया, तो यह वही है जो मैं लंबे समय से देख रहा था
user829755

32
git show <commit_sha>

यह आपको दिखाएगा कि उस कमिट में क्या है। मुझे लगता है कि आप केवल दो कमिट शों के बीच एक जगह लगाकर इसे रेंज कर सकते हैं।

git show <beginning_sha> <ending_sha>

यदि आप अक्सर रिबास कर रहे हैं तो यह बहुत उपयोगी है क्योंकि आपके फीचर लॉग सभी एक पंक्ति में होंगे।


25

Git-diff (1) के लिए मैन पेज से :

git diff [options] [<commit>] [--] [<path>…]
git diff [options] --cached [<commit>] [--] [<path>…]
git diff [options] <commit> <commit> [--] [<path>…]
git diff [options] <blob> <blob>
git diff [options] [--no-index] [--] <path> <path>

बीच में 3 एक का उपयोग करें:

git diff [options] <parent-commit> <commit>

उदाहरण के अनुभाग में नीचे, समान मैन पेज से भी :

$ git diff HEAD^ HEAD      <3>

अंतिम प्रतिबद्ध और अंतिम प्रतिबद्ध से पहले संस्करण की तुलना करें।

बेशक यह थोड़ा भ्रमित शब्द है, यह कम भ्रामक होगा

इससे पहले के साथ सबसे हालिया प्रतिबद्ध की तुलना करें।


3
आपकी रीवॉर्डिंग लागू होगी git diff HEAD HEAD^
रिचर्ड

git diff HEAD ^ HEAD कोई परिवर्तन प्रदर्शित नहीं करता है।
user3690202

@ user3690202 ताकि इसका अर्थ है कि प्रदर्शित करने के लिए कोई परिवर्तन नहीं हैं। क्या वास्तव में ऐसा है?

प्रदर्शित करने के लिए कोई परिवर्तन नहीं हो सकता है? यदि आप अंतिम प्रतिबद्ध देखना चाहते हैं, तो निश्चित रूप से जब तक कि यह पूरी तरह से नया भंडार न हो, तब तक कुछ बदलाव प्रदर्शित करने होंगे?
user3690202

@ user3690202 Git के साथ एक "खाली कमिट" बनाना संभव है जिसमें वास्तव में माता-पिता से कोई बदलाव नहीं होता है, हालांकि एक अंतर्निहित सुरक्षा है जो इसकी जांच करता है और इसे रोकता है, हालांकि यह एक कमांड लाइन विकल्प के साथ अतिश्योक्तिपूर्ण है। मुझे संदेह है कि आप जानबूझकर एक खाली प्रतिबद्ध बनाएंगे, इसलिए एक और संभावना यह है कि आप किसी भी तरह से (या अन्य मज़ेदार व्हाट्सएप सामान) पर पूर्व-प्रतिबद्ध लाइन-एंड रूपांतरण कर रहे हैं, जो इस सोच में फंस गया है कि वास्तव में कोई बदलाव नहीं किया गया है। आप किस प्लेटफॉर्म पर Git चला रहे हैं?

22

निम्नलिखित कार्य करने के लिए लगता है; मैं इसका उपयोग यह दिखाने के लिए करता हूं कि एक मर्ज द्वारा क्या लाया गया है।

git whatchanged -m -n 1 -p <SHA-1 hash of merge commit>

क्या वह भी साथ काम करेगा git log? (क्योंकि stackoverflow.com/a/18585297/6309 )
VONC

16

एक अन्य संभावना:

git log -p COMMIT -1

1
@GrantMcLean हाँ, और यह पहले से ही उच्चतम उत्थान वाले उत्तर में है, इसलिए मैं इसका उल्लेख नहीं करता।
जॉन_वेस्ट

11

आप उपयोग कर सकते हैं git diff HEAD HEAD^1 माता-पिता की प्रतिबद्धता के साथ अंतर को देखने के लिए ।

यदि आप केवल फाइलों की सूची देखना चाहते हैं, तो --statविकल्प जोड़ें ।


यह आपका मतलब है, git diff HEAD ^ 1 HEAD
शिबिर बसाक

ध्यान दें कि यह दिखाएगा कि आपने क्या जोड़ा है, क्योंकि यह एक विपरीत तुलना करेगा। जिस तरह से आपको diffकमांड पढ़ना चाहिए वह यह है: मुझे कमिट से कमिट HEADकरने के लिए फाइल में क्या बदलना होगा HEAD^1?
ब्रेनप्लॉट 25'19

9
git difftool COMMIT^ <commit hash>

यह भी संभव है यदि आपने अपने difftool को कॉन्फ़िगर किया है।

यहां देखें कि कैसे difftool या मैनुअल पेज को कॉन्फ़िगर करना है है

इसके अतिरिक्त आप यह git diff-tree --no-commit-id --name-only -r <commit hash>देखने के लिए उपयोग कर सकते हैं कि कौन सी फाइलें हैश कमिट हैश में बदल दी गई हैं


9

मैं एक विशिष्ट प्रतिबद्धताओं और इसकी अंतिम प्रतिबद्धताओं की तुलना करने के लिए नीचे दिए गए आदेश को पसंद करता हूं:

git diff <commit-hash>^-

उदाहरण:

git diff cd1b3f485^-

6

लेखक और समय का उपयोग करने के लिए देखें git show COMMIT। जिसके परिणामस्वरूप कुछ इस तरह होगा:

commit 13414df70354678b1b9304ebe4b6d204810f867e
Merge: a2a2894 3a1ba8f
Author: You <you@you.com>
Date:   Fri Jul 24 17:46:42 2015 -0700

     Merge remote-tracking branch 'origin/your-feature'

यदि आप यह देखना चाहते हैं कि कौन सी फाइलें बदली गई थीं, तो ऊपर दिए गए मर्ज लाइन से मानों को चलाएं git diff --stat a2a2894 3a1ba8f

यदि आप वास्तविक अंतर देखना चाहते हैं, तो दौड़ें git --stat a2a2894 3a1ba8f


"यदि आप वास्तविक अंतर देखना चाहते हैं, तो दौड़ें git --stat a2a2894 3a1ba8f"। मुझे लगता है कि आप का मतलब है git diff a2a2894 3a1ba8fया फिर unknown option: --stat
फल

5

पूर्ण परिवर्तनों की जाँच के लिए:

  git diff <commit_Id_1> <commit_Id_2>

केवल परिवर्तित / जोड़े / हटाए गए फ़ाइलों की जाँच के लिए:

  git diff <commit_Id_1> <commit_Id_2> --name-only

नोट : जाँच के लिए बीच में कमिट के बिना, आपको कमिट आईडी डालने की आवश्यकता नहीं है।


4

मैं Windows 10 पर Git संस्करण 2.6.1.windows.1 चला रहा हूं, इसलिए मुझे नेविक के उत्तर (कैरेट के बजाय टिल्ड) में थोड़ा संशोधन करने की आवश्यकता है:

git diff COMMIT~ COMMIT

एक अन्य विकल्प कैरट को उद्धृत करना है:

git diff "COMMIT^" COMMIT

3

इस कमांड से आपको Git पैरेंट कमिट-हैश मिलेगा:

git log -n 2 <commit-hash>

उसके बाद git diff-tool <commit-hash> <parent-commit-hash>

उदाहरण:

bonnie@bonnie ~/ $ git log -n 2 7f65b9a9d3820525766fcba285b3c678e889fe3

commit 7f65b9a9d3820525766fcba285b3c678e889fe3b
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 13:17:07 2016 +0530

CSS changed to maintain the aspect ratio of the channel logos and to fit them properly.

commit c3a61f17e14e2b80cf64b172a45f1b4826ee291f
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 11:28:09 2016 +0530

The ratio of the height to width of the channel images are maintained.

इसके बाद

git difftool 7f65b9a9d3820525766fcba285b3c678e889fe3b c3a61f17e14e2b80cf64b172a45f1b4826ee291f

2

यदि आप केवल नवीनतम प्रतिबद्धताओं में परिवर्तन देखना चाहते हैं, तो बस git showआपको वह दे देंगे।


1

चित्रमय दृश्य में स्रोत परिवर्तन की जाँच करने के मामले में,

$gitk (Mention your commit id here)

उदाहरण के लिए:

$gitk HEAD~1 

मुझे समझ नहीं आ रहा है कि यह उत्तर क्यों अस्वीकृत किया गया। मैं मानता हूं कि कमांड लाइन और टेक्स्ट आधारित सामान जाने का रास्ता है, लेकिन गिटक बहुत सारी उपयोगी जानकारी देता है।
शेलफिश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.