2011-04-14 7 views
41

मेरे मित्र की स्थानीय master शाखा स्पष्ट रूप से एक आपदा है (आकस्मिक merge एस और commit एस के माध्यम से, मुझे लगता है)। हालांकि, उनकी देव शाखाएं ठीक हैं लेकिन उनमें परिवर्तन शामिल हैं जो वह दूरस्थ रूप से धक्का देने के लिए तैयार नहीं हैं।रिमोट रिपोजिटरी से किसी शाखा की ताजा प्रति कैसे प्राप्त करें?

रिमोट master शाखा के साथ अपनी स्थानीय master शाखा को ओवरराइड करने का सबसे अच्छा तरीका क्या है और एक नई प्रति प्राप्त करें (अपनी अन्य शाखाओं को ओवरराइड किए बिना)? अपने मूल राज्य के लिए मास्टर की स्थापना:

उत्तर

58

रूप Jefromi टिप्पणी की,

git checkout master 
git reset --hard origin/master 

सही काम करता है। (यदि आप पहले से ही master शाखा पर हैं, तो आप पहले कमांड को छोड़ सकते हैं।) यह शाखा के रिफ्लॉग को बरकरार रखता है।


पुरानी अवर जवाब:

git checkout dev 
git branch -D master 
git checkout master 

यह एक और शाखा पर स्विच करता है ("देव" इस मामले में - किसी भी अन्य शाखा आप हो सकता है चुनते हैं), स्थानीय master शाखा को हटा देता है, और उसके बाद remotes/origin/master से इसे पुन: प्रयास करता है (जो आपकी सेटिंग्स और गिट संस्करण के आधार पर काम नहीं कर सकता है)। पिछले आदेश अक्सर

git checkout -b master remotes/origin/master 

इस ऊपर नया उत्तर की तुलना में नुकसान यह है कि reflog नष्ट कर दिया और निर्मित किया गया है के बराबर है (यानी आप कर सकते हैं आसान के रूप में नहीं पूर्ववत इस यदि आवश्यक हो), और यह कम स्पष्ट है यहाँ क्या हुआ। साथ ही, आपको एक और शाखा मौजूद करने की आवश्यकता है जिसमें आप हटाने और मनोरंजन के दौरान स्विच कर सकते हैं (लेकिन मूल प्रश्न में यह मामला था)।

+6

क्यों न केवल 'गिट रीसेट - मूल उत्पत्ति/मास्टर'? इसके अलावा ... क्या वह आखिरी कदम भी काम करता है? मेरे लिए प्रतीत नहीं होता है। ('गिट चेकआउट -बी मास्टर मूल/मास्टर' हालांकि होगा।) – Cascabel

+0

@ जेफ्रोमी: आप सही हैं, मुझे स्पष्ट समाधान नहीं मिला। आखिरी बार मेरे लिए काम करना प्रतीत होता है (चेकआउट में कुछ डिफ़ॉल्ट है यदि शाखा मौजूद नहीं है, लेकिन एक फिटिंग रिमोट एक करता है)। हालांकि, यह संस्करण पर निर्भर हो सकता है। –

+1

मैंने पहले समाधान की कोशिश की और यह काम नहीं किया। इसे संपादित करना अच्छा लगेगा। – lulalala

4

पाउलो Ebermann के जवाब सही है:

git checkout master 
git reset --hard origin/master 

और जोड़ने है कि आप भी ट्रैक न किए गए फ़ाइलें और नजरअंदाज कर दिया फ़ाइलें निकालना चाहते हैं, तो:

git clean -xfn # dry run with -n 

अधिक जानकारी के साथ स्रोत: How to remove local (untracked) files from the current Git working tree?

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