चूंकि यह विषय अक्सर आता है, और गिट काम करता है, इस बारे में कुछ पृष्ठभूमि के बिना भ्रमित हो सकता है, मैंने सोचा कि मैं सबसे सरल मामले को समझाने की कोशिश करूंगा, लेकिन पर्याप्त गहराई के साथ कि नए आने वालों के पास पर्याप्त संभाल होगा अतिरिक्त शोध करने के लिए।
यदि आप अपने गिट रिपोजिटरी को सामान्य 'क्लोन' के माध्यम से सेट करते हैं और डिफ़ॉल्ट रीफस्पेक्स रखते हैं, जिसका अर्थ है कि आपके रिमोट को 'मूल' नाम दिया गया है और आप शाखा 'मास्टर' से खींच/लाते हैं, तो आपको कभी-कभी देखने की आवश्यकता हो सकती है इसे खींचने से पहले रिमोट रिपोजिटरी में क्या है।
चूंकि "गिट पुल" स्वचालित विलय करता है (जब तक कि विवाद न हो), यह देखना अच्छा हो सकता है कि अगला "आने वाला" क्या है। यदि आप गिट काम करने के तरीके से परिचित नहीं हैं, और विशेष रूप से रीफस्पेक्स कैसे प्रबंधित किए जाते हैं, तो यह थोड़ा गैर-अंतर्ज्ञानी हो सकता है।
मान लीजिए किसी दूरस्थ भंडार में कोई परिवर्तन नहीं करता (उदाहरण के लिए, एक परिवर्तन प्रतिबद्ध होते हैं और यह धक्का द्वारा दूरस्थ भंडार के लिए एक लाइन जोड़ने), और आप टाइप करें:
$ git diff origin/master
आप शायद कोई बदलाव नहीं देखेंगे; लेकिन यदि आप निम्न कार्य करें:
$ git fetch; git diff ..origin/master
तुम क्या अपने स्थानीय Git भंडार और क्या दूरस्थ भंडार में है करने के लिए प्रतिबद्ध किया गया है के बीच अंतर देखेंगे। आपको कोई भी परिवर्तन नहीं दिखाई देगा जो आपके स्थानीय फाइल सिस्टम में हैं या आपके इंडेक्स में चरणबद्ध हैं।
ठीक है, हम ऐसा क्यों करते हैं? मूल/मास्टर रेफस्पेक (मैन पेज देखें) है। संक्षेप में, हम यही तुलना करते हैं कि हम तुलना करने, खींचने या लाने, और धक्का देने के लिए तुलना करते हैं।निम्न में से सभी कार्यात्मक रूप से बराबर कर रहे हैं:
origin/master
remotes/origin/master
refs/remotes/origin/master
इस सुलझाना करने के लिए शुरू करने के लिए, बस अपने भंडार के .git निर्देशिका संरचना पर एक नज़र। एक सामान्य लेआउट इस तरह दिखता है:
.git/refs
.git/refs/heads
.git/refs/heads/master
.git/refs/remotes
.git/refs/remotes/origin
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
.git/refs/tags
देखें .git/refs/remotes/origin/HEAD; डिफ़ॉल्ट स्थिति में यह उस शाखा को इंगित करेगा जिसका उपयोग आप खींचने और पुश करने के लिए करते हैं। मेरे मामले में, के बाद से मैं मास्टर पर हूँ, इस पाठ फ़ाइल की सामग्री को इस तरह दिखेगा:
ref: refs/remotes/origin/master
यह मुझसे कहता है कि मेरे दूरस्थ की प्रमुख refspec 'refs/रिमोट/मूल/मास्टर द्वारा पहचाना जाता है '(जो ऊपर वर्णित उपनाम होता है)।
यह हमें बहुत कुछ नहीं बताता है; रिमोट रिपोजिटरी की स्थिति क्या है? दूरदराज के मास्टर के राज्य को देखो:
$ cat .git/refs/heads/master
6d0fb0adfdfa5af861931bb06d34100b349f1d63
ठीक है, यह एक SHA1 हैश है; शायद एक प्रतिबद्धता। यह इस फाइल में कैसे लगाया जाता है? खैर, जब भी आप पुल या फ़ेच करते हैं, तो यह फ़ाइल रिमोट से हालिया प्रतिबद्धता के साथ अपडेट की जाती है जिसे खींचा या लाया जाता था। यह बताता है कि diff प्रदर्शन करने से पहले हमें git fetch
क्यों करना है। याद रखें, git fetch
बस एक दूरस्थ शाखा की आपकी स्थानीय प्रति अपडेट करता है, लेकिन यह आपकी कार्यशील प्रतिलिपि में विलय नहीं करता है। यह पूरी तरह से सुरक्षित है। git fetch; git merge
git pull
के समतुल्य है।
एक बार जब आप fetch करते हैं, तो गेट रिमोट के समय के रूप में रिमोट भंडार में सबसे हालिया प्रतिबद्धता देख पाएगा।
आप के रूप में आप की इच्छा अपने डिफ देखने के लिए git करने के लिए विनिर्देशक के विभिन्न संयोजनों का उपयोग कर सकते (निम्न उदाहरण के रूप में निहित पहले स्थानीय काम कर प्रति का उपयोग करने की):
$ git diff remote/origin
This shows the incoming remote additions as deletions; any additions in your local
repository are shown as additions.
$ git diff ...remote/origin
Shows incoming remote additions as additions; the triple-dot excludes changes
committed to your local repository.
$ git diff ..remote/origin
Shows incoming remote additions as additions; the double-dot includes changes
committed to your local repository as deletions (since they are not yet pushed).
पर जानकारी के लिए ".." बनाम "..." git help diff
पर उत्कृष्ट दस्तावेज git-scm revision selection: commit ranges पर संक्षेप में, ऊपर दिए गए उदाहरणों के लिए, डबल-डॉट सिंटैक्स दिखाता है कि सभी मूल/मास्टर से पहुंच योग्य होते हैं लेकिन आपकी कार्यशील प्रति नहीं। इसी तरह, ट्रिपल-डॉट सिंटैक्स सभी प्रतिबद्धताओं को या तो प्रतिबद्ध (अंतर्निहित कार्य प्रतिलिपि, रिमोट/मूल) से पहुंचने योग्य दिखाता है लेकिन दोनों से नहीं।
मैं इस कदम से कदम उठा रहा हूं क्योंकि मैं गिट के लिए बिल्कुल नया हूं और यह वास्तव में ऐसी चीज है जिसकी मुझे उलझन में है ... मुझे यकीन है कि गिट विशेषज्ञों के साथ त्रुटियां मिल सकती हैं विवरण ... मुझे उम्मीद है कि यह उत्तर कुछ लोगों के लिए अंतर को पुल करता है जो सभी विभिन्न पदों को थोड़ा सा पाते हैं।
मुझे प्रश्न समझ में नहीं आता है। Diff आपको शाखाओं के बीच अंतर दिखाता है, आपको क्यों लगता है कि वे विलय नहीं करेंगे? – Abizern
@ अबीज़र्न मेरे बुरे! मैंने सवाल को सही किया। धन्यवाद! :) – abhiomkar
संभावित डुप्लिकेट [दूरस्थ शाखा के साथ स्थानीय गिट शाखा की तुलना करें?] (Http://stackoverflow.com/questions/1800783/compare-local-git-branch-with-remote-branch) –