Git रिमोट से खींचते समय दूरस्थ परिवर्तनों का उपयोग करके विरोधों को हल करें


297

मैं अपने सर्वर पर अपने GitHub रेपो से कोड खींचने की कोशिश कर रहा हूं, लेकिन मर्ज संघर्ष के कारण पुल विफल रहता है। मैं पिछले पुल के बाद से अपने स्थानीय सर्वर पर होने वाले परिवर्तनों को नहीं रखना चाहता।

तो क्या ऐसा कोई तरीका है जिससे मैं GitHub में जो भी संस्करण है, उसे लागू करने के बजाय GitHub को अधिलेखित करने के लिए मजबूर कर सकता हूं, बजाय इसके कि मैं संघर्षों के बारे में परेशान करूं?



4
@nvm: नहींं। यह वास्तविक मर्ज संघर्षों के बारे में है, न कि बिना लिखी गई फ़ाइलों को जो अधिलेखित किए जाएंगे।
कैस्केबेल

जवाबों:


491

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

# fetch from the default remote, origin
git fetch
# reset your current branch (master) to origin's master
git reset --hard origin/master

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

यदि दूसरी ओर, आप उन कमिट्स को रखना चाहते हैं और इसे वैसा ही बनाना चाहते हैं जैसे कि आप मूल में विलीन हो गए हैं, और मर्ज को केवल मूल से रखने के कारण, आप oursमर्ज रणनीति का उपयोग कर सकते हैं :

# fetch from the default remote, origin
git fetch
# create a branch at your current master
git branch old-master
# reset to origin's master
git reset --hard origin/master
# merge your old master, keeping "our" (origin/master's) content
git merge -s ours old-master

1
Git कमांड के दूसरे ब्लॉक में .. दूसरी कमांड के बाद 'git fetch origin' होना चाहिए?
डेविड टाइट

@ डेविड: हां, आपको किसी बिंदु पर मूल से लाना चाहिए। क्षमा करें, मैंने इसे निहित माना।
Cascabel

2
ऐसा कुछ भी नहीं है जो मेरे और जीआईटी ;-) के आने पर निहित हो सकता है। गंभीरता से हालांकि, एक लाख धन्यवाद। आपके उत्तर ठीक वही हैं जो मैं खोज रहा था।
डेविड टयूइट

1
यदि वास्तव में उत्पत्ति आगे है तो क्या यह काम करेगा? यदि मैं आगे कोई कमिट नहीं करता हूं, और वास्तव में शाखा को तेजी से अग्रेषित किया जा सकता है, तो क्या मैं भी इसका उपयोग कर सकता हूं?
जारेड फोर्सिथ

1
धन्यवाद! यह आसान लग रहा था।
शोल्सिंगर

137

आप या तो nvm द्वारा इंगित डुप्लिकेट लिंक से उत्तर का उपयोग कर सकते हैं।

या आप उनके परिवर्तनों का उपयोग करके संघर्षों को हल कर सकते हैं (लेकिन आपके कुछ परिवर्तनों को रखा जा सकता है यदि वे दूरस्थ संस्करण के साथ विरोध नहीं करते हैं):

git pull -s recursive -X theirs

3
लगता है मेरे लिए काम नहीं कर रहा है। मुझे git git संस्करण 1.5.6.5 का उपयोग करके "त्रुटि: अज्ञात स्विच` X 'मिलता है। क्या मुझे अस्थिर संस्करण में अपग्रेड करने की आवश्यकता है?
डेविड टुइट

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


2
यही वह है जिसकी तलाश में मैं हूं!
मिहब्लू

2
@CeesTimmerman सच नहीं है, कम से कम नवीनतम गिट में। Xविकल्प को मर्ज करने की रणनीति के माध्यम से पारित किया जाता है, जो केवल तभी होता है recursiveजब दो प्रमुखों को मर्ज किया जाता है, इसलिए आपकी कमांड शिकायत करेगी "Could not find merge strategy 'theirs'. Available strategies are: octopus ours recursive resolve subtree."- यह शर्म की बात है, क्योंकि Xकॉन्फ़िगरेशन में सेट किया जा सकता है (जैसे git config pull.twohead theirs) लेकिन sनहीं कर सकता।
OJFord
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.