फ़ाइल को कमिट करने से पहले कैसे देखें


443

यह अक्सर मेरे साथ होता है:

मैं एक या दो दिन के दौरान एक ही समय में एक जोड़े से संबंधित परिवर्तनों पर काम कर रहा हूं, और जब यह प्रतिबद्ध होने का समय है, तो मैं यह भूल गया कि एक विशिष्ट फ़ाइल में क्या बदल गया है। (यह सिर्फ एक व्यक्तिगत git रेपो है, इसलिए मैं कमिट में एक से अधिक अपडेट रखने के साथ ठीक हूं।)

क्या मेरी स्थानीय फ़ाइल के बीच परिवर्तनों का पूर्वावलोकन करने का कोई तरीका है, जो उस फ़ाइल के लिए जाँच करने वाला है और अंतिम प्रतिबद्ध है?

कुछ इस तरह:

git diff --changed /myfile.txt

और यह कुछ इस तरह छपेगा:

line 23
  (last commit): var = 2+2
  (current):     var = myfunction() + 2

line 149
  (last commit): return var
  (current):     return var / 7

इस तरह, मैं जल्दी से देख सकता था कि मैंने उस फ़ाइल में क्या किया था क्योंकि इसे अंतिम बार चेक किया गया था।

जवाबों:


732

यदि आप यह देखना चाहते हैं कि आपने git addअभी तक क्या नहीं किया है:

git diff myfile.txt

या यदि आप पहले से ही जोड़े गए परिवर्तन देखना चाहते हैं

git diff --cached myfile.txt

20
जांच करें git add -p। हर बदलाव की समीक्षा करें, यदि आप अपना मन बदलते हैं, तो किसी भी समय मंच पर बदलावों का चयन करें, और यहां तक ​​कि इनलाइन को भी एक हिस्सा संपादित करें। मैं इसके git addबिना कभी नहीं ।
काइल बेकर

2
आप फ़ाइल से बाहर कैसे आ सकते हैं?
किक बटोस्की

3
@ किक दबाने की कोशिश करेंq
wjandrea

इसके अलावा, यदि आप अलग-अलग परिणाम में मूर्खतापूर्ण 'ए' और 'बी /' उपसर्गों को निकालना चाहते हैं, तो आप सेट कर सकते हैं git config --global diff.noprefix true
लियांग

64
git diff HEAD file

आपको अंतिम कार्य से अपने कार्यक्षेत्र में आपके द्वारा जोड़े गए परिवर्तनों को दिखाएगा। सभी परिवर्तन (मंचन या मंचन नहीं) दिखाए जाएंगे।


1
आपका समाधान काम करता है। लेकिन मैं थोड़ा उलझन में हूं। HEAD नवीनतम प्रतिबद्ध संख्या की ओर इशारा करता है। इसलिए, जब हम जोड़ते हैं, तो कार्यशील निर्देशिका के सूचकांक को अपडेट किया जाता है और हेड को नहीं। तो यह अंतर कैसे दिखाता है।
माव 55

17

स्थानीय अंतरों की जांच करने के लिए:

git diff myfile.txt

या आप एक भिन्न टूल का उपयोग कर सकते हैं (यदि आप कुछ बदलावों को वापस करना चाहते हैं तो):

git difftool myfile.txt

git difftoolअधिक कुशलता से उपयोग करने के लिए , अपने पसंदीदा GUI टूल जैसे Meld, DiffMerge या OpenDiff को स्थापित और उपयोग करें।

नोट: आप .वर्तमान फ़ाइल परिवर्तन को देखने के लिए (फ़ाइल नाम के बजाय) का उपयोग कर सकते हैं ।

प्रत्येक पंक्ति में परिवर्तन की जाँच करने के लिए, उपयोग: git blameजो प्रदर्शित करेगा कि कौन सी लाइन किस प्रतिबद्ध में शुरू की गई थी।


प्रतिबद्ध (जहां masterआपकी शाखा है) से पहले वास्तविक फ़ाइल देखने के लिए , दौड़ें:

git show master:path/my_file

15

क्या आपने -v(या --verbose) विकल्प के लिए प्रयास किया था git commit? यह संदेश संपादक में प्रतिबद्ध का अंतर जोड़ता है।


अच्छा उत्तर। यह प्रतिबद्ध संपादक में जानकारी प्रदान कर सकता है, मुझे अधिक आसानी से प्रतिबद्ध करता है। क्या ऐसा कोई तरीका है जो सूचना क्षेत्र को बंद Changes not staged for commit:कर सकता है, जिससे प्रतिबद्ध संपादक और अधिक स्वच्छ हो सके।
रेडियन जेंग

15

एक और तकनीक पर विचार करने के लिए यदि आप एक फ़ाइल की तुलना अंतिम प्रतिबद्ध से करना चाहते हैं जो अधिक पांडित्य है:

git diff master myfile.txt

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

git diff master^ myfile.txt

और उससे पहले एक:

git diff master^^ myfile.txt

यदि आप मास्टर शाखा पर नहीं हैं, तो आप कार्यवाहक के लिए '~' और 'मास्टर' के लिए 'यू ब्रांच नाम' का विकल्प चुन सकते हैं।


14

मुझे लगता है कि यह एक जीयूआई वारंट का सही उपयोग मामला है। - हालांकि मैं पूरी तरह से समझता हूं कि इसे कमांड लाइन के भीतर पर्याप्त रूप से हासिल किया जा सकता है।

व्यक्तिगत रूप से, मेरी हर प्रतिबद्धता, मैं गिट-गुई से करता हूं। अगर मैं ऐसा करने के लिए समझ में आता है, तो मैं अलग-अलग हिस्सों / लाइनों के साथ कई परमाणु आवागमन कर सकता हूं।

गुट गुई एक अच्छी तरह से प्रारूपित रंगीन इंटरफ़ेस में भिन्न को देखने में सक्षम बनाता है, बल्कि हल्का होता है। ऐसा लगता है कि कुछ ऐसा है जिसे आपको चेकआउट भी करना चाहिए।


मैं सहमत हूं - यह आपको अंतर को देखते हुए प्रतिबद्ध संदेश को संपादित करने की भी अनुमति देता है।
फ्रांस्वा

जानकर अच्छा लगा, लेकिन मैं सीएलआई से चिपकना चाहूंगा। मैंने एक दम्पति पैकेज का उपयोग किया है, जो मेरे पास था, लेकिन मैं अपने वर्कफ़्लो के लिए कड़ाई से टर्मिनल / विम पर चला गया। हालांकि धन्यवाद।
सॉस मैकबॉस

हाँ, यदि आप GUI से चिपके रहते हैं, तो बहुत सारी शांत सुविधाएँ हैं git bisectजो वास्तव में सुलभ नहीं हैं।
NoBugs

2
मैं सहमत हूं - ऐसे कई विकल्प हैं जिनके लिए यह बहुत तेज है और कमांड लाइन का उपयोग करने के लिए अधिक समझ में आता है। हालाँकि, परिवर्तनों का पूर्वावलोकन उनमें से एक नहीं है।
विटालिबी

पाठ उपयोगकर्ता इंटरफ़ेस भी हैं, जो टर्मिनल में चलते हैं। एक जाँच के लायक है tig"Git के लिए पाठ-मोड इंटरफ़ेस"।
स्मिडो

10

MacOS पर, git रूट डायरेक्टरी में जाएं और एंटर करें git diff *


हाँ, ऐसा होता है, मैंने अभी इसका परीक्षण किया है। क्या आपके पास गिट स्थापित है? कोई त्रुटि संदेश? शायद इस बारे में एक नया सवाल पूछा जा सकता है।
19

4

सबसे अच्छा तरीका मैंने पाया, एक समर्पित कमिट जीयूआई का उपयोग करने के लिए, का उपयोग करना है git difftool -d- यह आपके डिफरेंट टूल को डायरेक्टरी तुलना मोड में खोलता है, एचईएडी की वर्तमान गंदे फ़ोल्डर के साथ तुलना करता है।


वास्तव में मुझे क्या चाहिए। धन्यवाद
इवान फेरर विला

3
git difftool -d HEAD filename.txt

यह टर्मिनल में VI स्लिट विंडो का उपयोग करके तुलना दिखाता है।

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