स्थानीय अप्रभावित परिवर्तनों और उत्पत्ति के बीच अंतर कैसे करें


141

मान लीजिए कि मैंने एक रिपॉजिटरी क्लोन किया और फाइलों को संशोधित करना शुरू कर दिया। मुझे पता है कि अगर मेरे पास स्थानीय अप्रयुक्त परिवर्तन हैं, तो मैं निम्नानुसार एक अंतर कर सकता हूं git diff test.txtऔर यह मुझे वर्तमान स्थानीय एचएएडी और फ़ाइल में संशोधित, अप्राप्त परिवर्तनों के बीच का अंतर दिखाएगा। अगर मैं उन परिवर्तनों को करता हूं तो मैं इसका उपयोग करके मूल भंडार के खिलाफ अलग कर सकता हूंgit diff master origin/master

लेकिन क्या स्थानीय परिवर्तन करने से पहले सर्वर पर मूल रिपॉजिटरी के साथ स्थानीय परिवर्तनों को अलग करने का कोई तरीका है ? मैंने git diff --cached master origin/masterबिना किसी भाग्य के विभिन्न क्रमों की कोशिश की ।


मैं जानना चाहता था कि मेरी फ़ाइल मेरे स्थानीय पर पिछले प्रतिबद्ध संस्करण से कितनी बदल गई है। मेरे सवाल का जवाब यह सवाल था। धन्यवाद!
सौविक घोष

जवाबों:


133

यह देखते हुए कि रिमोट रिपॉजिटरी को कैश कर दिया गया है, git fetchइन कमिट्स के खिलाफ तुलना करना संभव है। निम्नलिखित का प्रयास करें:

$ git fetch origin
$ git diff origin/master

5
आह, उत्कृष्ट। चाबी मास्टर को बाहर छोड़ने के लिए थी। मैंने एक संयोजन की कोशिश की थी जहां मैं पहले एक भ्रूण ला रहा था, लेकिन जब मैंने किया git diff master origin/masterथा तब भी प्रतिबद्ध संस्करण के खिलाफ तुलना कर रहा था (स्पष्ट रूप से पूर्वव्यापी में)। लेकिन मास्टर को छोड़ना अब भ्रूण के संस्करण के खिलाफ स्थानीय परिवर्तनों की तुलना करता है।
चैतन्य

@ कुचतन्य अच्छा मैं मदद कर सकता था। वास्तव में मुझे लगता है कि अलग-अलग शैलियों में गिट थोड़ा परेशान करता है: एक बार आपको लिखना होगा origin masterऔर कहीं और origin/master। अभी भी काम करना है, IMHO।
JJD

यह काम नहीं करता है: git diff origin/masterरिटर्न fatal: ambiguous argument 'origin/master': unknown revision or path not in the working tree.मास्टर मूल पर मौजूद है, हालांकि, git fetch origin masterठीक काम करता है,
mikemaccana

42

मुझे पता है कि यह पूछे गए सटीक प्रश्न का उत्तर नहीं है, लेकिन मुझे यह प्रश्न एक शाखा और एक स्थानीय फ़ाइल में एक फ़ाइल को अलग करने की तलाश में मिला और मुझे लगा कि मैं साझा करूँगा

वाक्य - विन्यास:

git diff <commit-ish>:./ -- <path>

उदाहरण:

git diff origin/master:./ -- README.md
git diff HEAD^:./ -- README.md
git diff stash@{0}:./ -- README.md
git diff 1A2B3C4D:./ -- README.md

(धन्यवाद एरिक बोहेस को दो बार फाइलनेम टाइप करने के लिए नहीं)


मुझे संकीर्ण, विशिष्ट एक से ऊपर सामान्य समाधान पसंद है। मन साझा करना जहां आपने पाया?
फबिकलाइन

मैं commit-ishऔर औपनिवेशिक विभाजक के विवरण पर प्रलेखन को खोजने के लिए प्रतीत नहीं कर सकता । Git-diff पर डॉक्स इसका उल्लेख नहीं करते हैं। मैंने इसे इतने लंबे समय तक उपयोग किया है कि मुझे याद नहीं है कि मैंने पहली बार इसे कहां पाया था। संभवतः अन्य आदेशों पर अन्य लोगों के उदाहरण और मैंने अभी प्रयोग किया है git-diff। मुझे डर है कि इस समय मैं एक और जवाब देcommit-ish सकता हूं।
नैट

3
इसका एक अच्छा जोड़ है git diff master:./ -- README.md। इस तरह से आपको README.mdदो बार टाइप करने की जरूरत नहीं है और आप इसे एक आसान उपनाम में जोड़ सकते हैं।
एरिक बोह्स

धन्यवाद @EricBoehs, यह एक बढ़िया सुझाव है।
नैट

1
यही कारण है कि वाक्य रचना मेरे लिए काम नहीं कर रहा है ... बल्कि एक बनाता है दूरस्थ शाखा स्रोत के बजाय। का उपयोग करते हुए Git संस्करण 2.19.0git diff master: -- README.md.//dev/null
rustyDev

21

गैर-मंचित (गैर-जोड़ा गया) मौजूदा फ़ाइलों में परिवर्तन देखने के लिए

git diff

ध्यान दें कि यह नई फ़ाइलों को ट्रैक नहीं करता है। मंचन, गैर-कमिटेड परिवर्तन देखने के लिए

git diff --cached


9

यदि आप ऐसी फ़ाइलों की तुलना करना चाहते हैं, जिनका आप उपयोग कर सकते हैं:

git difftool

यह प्रत्येक बदले हुए फ़ाइल के लिए स्वचालित रूप से आपका अलग ऐप शुरू करेगा।

पुनश्च: यदि आपने एक अलग ऐप सेट नहीं किया है, तो आप इसे नीचे दिए गए उदाहरण की तरह कर सकते हैं (मैं Winmerge का उपयोग करता हूं ):

git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
git config --global mergetool.prompt false

क्या यह परिवर्तन तुरंत प्रभावी होता है?
दिलीप रघुनाथन

मैं बस उत्सुक हूं, यह पूछे गए सवाल से कैसे संबंधित है? क्या गुरु के साथ स्थानीय बदलावों की तुलना नहीं करेंगे? हालांकि, ओपी इसे स्थानीय परिवर्तनों और दूरस्थ मास्टर के बीच चाहता है।
infoclogged

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