git स्थानीय संस्करण को दूरस्थ संस्करण से प्रतिस्थापित करता है


148

मैं अपनी स्थानीय फ़ाइल को अनदेखा करने के लिए और अपनी दूरस्थ शाखा से किसी को विलय करने और संघर्ष करने की कोशिश किए बिना कैसे ले सकता हूं?


1
अनुकरण करने के सभी मौजूदा तरीकों के लिए SO उत्तर " git कमांड को एक शाखा को दूसरे की तरह बनाने " के लिए देखें । git merge -s their
वॉनक

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

जवाबों:


169

यह सबसे सुरक्षित उपाय है:

git stash

अब आप संघर्ष के डर के बिना जो चाहें कर सकते हैं।

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

git checkout origin/master

यदि आप मास्टर शाखा में दूरस्थ परिवर्तन शामिल करना चाहते हैं, तो आप कर सकते हैं:

git reset --hard origin/master

यह आपको "मूल / मास्टर" को इंगित करने के लिए "मास्टर" शाखा देगा।


90
यह इंगित करने लायक हो सकता है कि यह HEAD को अलग कर देगा - प्रश्नकर्ता शाखा पर रहना पसंद कर सकता हैgit stash; git fetch origin; git reset --hard origin/master
मार्क लॉन्गेयर

10
मुझे लगता है कि मार्क लॉन्गेयर की टिप्पणी इस प्रश्न का वास्तविक उत्तर है

यह मेरे लिए +1
एंड्रेस

राज्य से पहले वापस कैसे जाएं git stash? git stash listखाली है।
सिंह

मैं आपको गले लगाना चाहता हूं
उगुर कजदल

45

मैं इस प्रश्न को इस रूप में समझता हूं: आप पूरी तरह से एक फ़ाइल (या चयन) की सामग्री को अपस्ट्रीम से बदलना चाहते हैं। आप सीधे सूचकांक को प्रभावित नहीं करना चाहते हैं (ताकि आप हमेशा की तरह ऐड + कमिट से गुजरें)।

बस करो

git checkout remote/branch -- a/file b/another/file

यदि आप व्यापक उपप्रकार के लिए ऐसा करना चाहते हैं और इसके बजाय सीधे सूचकांक के उपयोग को प्रभावित करना चाहते हैं

git read-tree remote/branch:subdir/

तब आप (वैकल्पिक रूप से) अपनी कार्य प्रतिलिपि को अपडेट करके कर सकते हैं

git checkout-index -u --force

2
जैसा मुझे चाहिए था यह बिल्कुल वैसा ही है। धन्यवाद।
ऑटोनॉमस

11

मेरी समझ यह है कि, उदाहरण के लिए, आपने गलत तरीके से एक फ़ाइल को सहेजा है जिसे आपने केवल परीक्षण उद्देश्यों के लिए अद्यतन किया था। फिर, जब आप "गिट स्थिति" चलाते हैं, तो फ़ाइल "संशोधित" के रूप में दिखाई देती है और आप कुछ बुरे शब्द कहते हैं। आप बस पुराने संस्करण को वापस चाहते हैं और सामान्य रूप से काम करना जारी रखते हैं।

उस परिदृश्य में आप केवल निम्न आदेश चला सकते हैं:

git checkout -- path/filename

10

मैं इस तरह "दूरस्थ" (दूरस्थ / मूल भंडार) से दूरस्थ फ़ाइल की जाँच करेगा:

git checkout master <FileWithPath>

उदाहरण: git चेकआउट मास्टर घटक / indexTest.html


मेरे लिए इस तरह से काम किया "git checkout remotes / origin / master <my-file>"
सरवनकुमार

4

विकल्प के साथ संयुक्त -sया --strategyविकल्प का उपयोग करें -X। अपने विशिष्ट प्रश्न में, आप सभी दूरस्थ फ़ाइलों को रखना चाहते हैं और उसी नाम की स्थानीय फ़ाइलों को बदलना चाहते हैं।

दूरस्थ संस्करण के साथ विरोधाभासों को बदलें

git merge -s recursive -Xtheirs upstream/master  

सभी परस्पर विरोधी फ़ाइलों के दूरस्थ रेपो संस्करण का उपयोग करेगा।

स्थानीय संस्करण के साथ विरोधाभासों को बदलें

git merge -s recursive -Xours upstream/master

सभी परस्पर विरोधी फ़ाइलों के स्थानीय रेपो संस्करण का उपयोग करेगा।

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