मैं देख सकता हूँ कि एक फ़ाइल को बदलने से पहले क्या बदल गया है?


351

मैंने देखा है कि एक या दो टिकटों पर काम करते समय, अगर मैं दूर जाता हूं, तो मुझे यकीन नहीं है कि मैंने क्या काम किया, क्या बदला, वगैरह।

क्या git add करने से पहले किसी फ़ाइल के लिए किए गए परिवर्तनों को देखने और फिर git कमिट करने का कोई तरीका है?

जवाबों:


525

तुम खोज रहे हो git diff। आपकी सटीक स्थिति के आधार पर, इसका उपयोग करने के तीन उपयोगी तरीके हैं:

# show differences between index and working tree
# that is, changes you haven't staged to commit
git diff [filename]
# show differences between current commit and index
# that is, what you're about to commit
# --staged does exactly the same thing, use what you like
git diff --cached [filename]
# show differences between current commit and working tree
git diff HEAD [filename]

यह निर्देशिकाओं पर पुनरावर्ती रूप से काम करेगा, और यदि कोई रास्ता नहीं दिया जाता है, तो यह सभी परिवर्तन दिखाता है।


1
@ sveilleux2 नहीं, बिना किसी तर्क के केवल git भिन्न चलाएं - जैसा कि उत्तर का अंतिम वाक्य कहता है, यदि कोई पथ नहीं दिया गया है, तो यह सभी परिवर्तनों को दर्शाता है। (कोष्ठक [filename]एक वैकल्पिक तर्क को इंगित करते हैं।) *आप शेल को सभी फाइलों को सूचीबद्ध करने दे रहे हैं, इसलिए यदि आप एक उपनिर्देशिका में हैं तो आपको केवल उस उपनिर्देशिका (संपूर्ण रेपो) में चीजें नहीं मिलेंगी, और आप ' छिपी हुई फ़ाइलों में परिवर्तन याद करेंगे।
कैस्केबेल

# वर्तमान प्रतिबद्ध और अनुक्रमणिका के बीच अंतर दिखाएं # अर्थात, आप क्या करने जा रहे हैं करने के लिए धक्का ? git diff - caked [filename]
ofarooq

3
फ़ाइल जोड़ने के बाद किए गए अंतर को देखने के लिए (जैसे, "गिट ऐड" के बाद), "git diff --staged [फ़ाइल का नाम" करें
Sidtharthan

ओह, यह इतना जटिल क्यों है ?! क्या होगा अगर हमारे पास दर्जनों फाइलें हैं? .. बस इंटरफ़ेस को शिकायत करने के लिए ... हाँ, लगता है, git add -pसभी फ़ाइलों का निरीक्षण करने का एक विकल्प है।
किर्बी

@ जेफ्रोमी - कृपया git diff --staged [filename]अपने मुख्य उत्तर में जोड़ने पर विचार करें क्योंकि यह एक ऐसी स्थिति है जिसकी आवश्यकता अक्सर होती है।
लाजरस थर्स्टन



8

मेरे git add -pलिए सबसे उपयोगी तरीका है (और इरादा मुझे गिट डेवलपर्स द्वारा?) सभी अस्थिर परिवर्तनों की समीक्षा करने के लिए (यह प्रत्येक फ़ाइल के लिए भिन्न दिखाता है), उन परिवर्तनों का एक अच्छा सेट चुनें जो एक कमिट के साथ जाना चाहिए, फिर जब आपके पास हो उन सभी का मंचन, फिर उपयोग करें git commit, और अगले प्रतिबद्ध के लिए दोहराएं। फिर आप प्रत्येक बदलाव को एक उपयोगी या सार्थक सेट बना सकते हैं, भले ही वे विभिन्न फाइलों में हुए हों। मैं प्रत्येक टिकट या इसी तरह की गतिविधि के लिए एक नई शाखा बनाने का सुझाव भी दूंगा, और उनके बीच स्विच करके उपयोग checkoutकर git stashसकता हूं (शायद उपयोग करने से पहले यदि आप स्विच करना नहीं चाहते हैं), हालांकि यदि आप कई त्वरित बदलाव कर रहे हैं तो यह दर्द हो सकता है। अक्सर मर्ज करना न भूलें।


इसलिए git ऐड फ़ाइल नाम के बजाय git ऐड -p का उपयोग करें?
टिमोथी टी।

1
git add -p मंचन का एक संयोजन है, जिन परिवर्तनों को आप चरणबद्ध कर सकते हैं और उन्हें एक-एक करके इंटरैक्टिव तरीके से चुन सकते हैं। Git ऐड-पी पर अधिक के लिए Git में फ़ाइल का केवल भाग देखें ।
एंजेलो एसोनाइटिस

5

git diff

काम करने वाले पेड़ और सूचकांक या पेड़ के बीच के बदलाव, सूचकांक और एक पेड़ के बीच परिवर्तन, दो पेड़ों के बीच परिवर्तन या डिस्क के साथ दो फ़ाइलों के बीच परिवर्तन।


बोली का थोड़ा बहुत - डिफ़ॉल्ट रूप से, यह पहली तुलना करता है: कार्यशील पेड़ और सूचकांक के बीच।
कैस्केबेल

4

याद रखें, आप परिवर्तन कर रहे हैं , फाइलें नहीं।

इस कारण से, यह बहुत दुर्लभ है कि मैं git add -p(या मैजिट समकक्ष) का उपयोग अपने परिवर्तनों को जोड़ने के लिए नहीं करता हूं।


2
git परिवर्तनों से निपटता नहीं है - इसके बारे में सोचने की कोशिश करता है जैसे कि यह भ्रम और गलतियों का प्राथमिक स्रोत है। git स्नैपशॉट से संबंधित है।
क्रिस डोड

3
git diff <path>/filename

पथ फ़ाइल तक आपका पूरा सिस्टम पथ हो सकता है या
यदि आप इस परियोजना में हैं तो आप संशोधित फ़ाइल पथ को भी
संशोधित कर सकते हैं पथ के साथ संशोधित फ़ाइलों का उपयोग करें:git status


2

ठीक है, मेरा मामला जब आप फ़ाइलों की सूची के बारे में परवाह नहीं करना चाहते हैं। बस उन सबको दिखाओ।

जब आप पहले से git addही अपनी फ़ाइलों की सूची के साथ भाग गए :

$ git diff --cached $(git diff --cached --name-only)

के अधिक हाल के संस्करणों में git, आप इसका --stagedभी उपयोग कर सकते हैं , जिसका एक पर्याय है --cached

उसी का उपयोग फ़ाइलों को जोड़े बिना --cachedविकल्प के लिए नहीं किया जा सकता है ।

$ git diff $(git diff --name-only)

"कैश्ड" विकल्प के लिए git कमांड उपनाम:

$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'

3
विवरण के लिए धन्यवाद git diff --cached --name-only केवल वही कमांड था जिसकी मुझे तलाश थी ....
Doogle

1

अपने संबंधित git रेपो में जाएं, फिर नीचे कमांड चलाएँ:

गिट भिन्न फ़ाइल नाम

यह फ़ाइल को खोले गए परिवर्तनों के साथ खोलेगा, फाइल को नीचे स्क्रॉल करने के लिए रिटर्न / एंटर कुंजी दबाएगा।

PS फ़ाइलनाम में फ़ाइल का पूरा पथ शामिल होना चाहिए या फिर आप संबंधित फ़ाइल / फ़ाइल के फ़ोल्डर में जाकर पूर्ण फ़ाइल पथ के बिना चला सकते हैं


0

आप एक गिट-फ्रेंडली टेक्स्ट एडिटर का भी उपयोग कर सकते हैं। वे उन रेखाओं पर रंग दिखाते हैं जिन्हें संशोधित किया गया है, अतिरिक्त लाइनों के लिए एक और रंग, हटाए गए लाइनों के लिए एक और रंग, आदि।

एक अच्छा टेक्स्ट एडिटर जो ऐसा करता है वह है GitHub का Atom 1.0

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