2010-04-26 9 views
9

मैं पुल मूल कुछ_branch कर रहा हूं और देख सकता हूं कि बहुत सारे बदलाव हैं। आखिर में मुझे कोई फर्क नहीं पड़ता कि क्या वे मेरा सब मिटा देते हैं।मैं रिमोट से सभी परिवर्तन कैसे स्वीकार करूं?

मैं उन्हें बदले या मेरेटूल का उपयोग करके और फ़ाइलों को एक-एक करके कैसे विलय कर सकता हूं?

उत्तर

8

बस:

git clone $url 

गंभीरता से! यह सबसे अच्छा तरीका है।

आप रेफरी को स्थानांतरित करने के लिए git reset और git branch आदेशों के सभी प्रकार कर सकते हैं, लेकिन एकमात्र उद्देश्य भविष्य में संदर्भ के लिए आपके स्थानीय भंडार में कहीं भी अपना काम रखना होगा। यदि यह लक्ष्य है, तो बस पूरी रिपोजिटरी को रखें, और मूल को फिर से क्लोन करें।

सिर्फ एक शाखा पर सभी परिवर्तनों को स्वीकार करने के लिए, foo:

git checkout foo 
    git fetch origin +refs/heads/foo:refs/remotes/origin/foo 
    git reset refs/remotes/origin/foo 

foo अब इंगित करेगा ही में foo रूप origin पर करते हैं। यदि आप अपनी कार्यशील निर्देशिका में फ़ाइलों को उड़ाना चाहते हैं, तो --hard से git reset जोड़ें। यदि आप पहले मर्ज करना चाहते हैं, तो fetch को pull के साथ बदलें।

आपके स्थानीय रेपो में खतरनाक काम करने का एक गुच्छा हो सकता है, जो कि गिट किसी दिन साफ ​​हो सकता है, लेकिन थोड़ी देर के लिए आप अभी भी उन्हें रीफ्लॉग के माध्यम से एक्सेस कर सकते हैं।

+0

जानना अच्छा है :-) –

+1

इसके साथ एक बड़ी समस्या है: मेरे पास काम करने वाले पेड़ में बहुत सारे * अतिरिक्त * हैं। मैं बस रिमोट में किए गए सभी बदलावों को स्वीकार/लागू करना चाहता हूं। मैं अपने वर्तमान काम की सारी स्थिति को फेंकना नहीं चाहता हूं। तो यह मेरे लिए एक जवाब के रूप में काम नहीं करता है। – rfay

+0

@ रैंडी, यह एक अलग सवाल है, लेकिन एक अच्छा है। – cdunn2001

0

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

git checkout ours 
git checkout theirs -- *.php *.txt *.config modules themes includes scripts 
git commit -m "New version with all new key files from 'theirs'" 

जब तक मुझे दूसरी चेकआउट में फ़ाइलों और निर्देशिकाओं की सूची सही मिलती है, तो यह ठीक होना चाहिए।

यदि मैं चाहता था कि इतिहास "उनकी" शाखा पर आधारित हो, तो मैं इसे दूसरे तरीके से करना चाहूंगा।

+0

रैंडी, आप उस टिप्पणी को संपादित कर सकते हैं, फिर 8 स्पेस (शायद 4?) द्वारा कोड की प्रत्येक पंक्ति को इंडेंट करें ताकि आप बेहतर कह सकें। '--ours' और '--theirs' मान्य झंडे हैं, इसलिए आपको चित्रकारी शाखा नामों के लिए अलग-अलग शब्दों का उपयोग करना चाहिए। लेकिन हां, पथ निर्दिष्ट करने से उन्हें केवल उन फाइलों को प्राप्त करने की अनुमति मिल जाएगी। – cdunn2001

5

या:

git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git checkout --theirs 
git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git add 

जो बलों के सभी परस्पर विरोधी दूरस्थ फ़ाइलें स्वीकार कर।

संबंधित मुद्दे