यह वह है जो मैं अक्सर उपयोग करता हूं:
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
ध्यान दें कि यह किसी भी बदलाव के लिए एक और शाखा के लिए / अपने स्थानीय मास्टर में परिवर्तन करने के लिए नहीं शाखा का विकास, लेकिन इसके बजाय चेकआउट अच्छा अभ्यास है, परिवर्तन के प्रकार, जैसे द्वारा prepended शाखा नाम के साथ feat/
, chore/
, fix/
, आदि इस प्रकार आप केवल करने की जरूरत है परिवर्तन खींचो, गुरु से किसी भी परिवर्तन को धक्का मत देना। अन्य शाखाओं के लिए समान बात जो दूसरों के लिए योगदान करती है। इसलिए उपरोक्त का उपयोग केवल तभी किया जाना चाहिए जब आप उस शाखा में परिवर्तन करने के लिए हुए हों जो दूसरों ने की है, और जिसे रीसेट करने की आवश्यकता है। अन्यथा भविष्य में एक ऐसी शाखा पर धकेलने से बचें, जिसे अन्य लोग धकेलते हैं, इसके बजाय चेकआउट करें और जाँच की गई शाखा के माध्यम से उक्त शाखा को धकेलें।
यदि आप अपनी स्थानीय शाखा को अपस्ट्रीम शाखा में नवीनतम प्रतिबद्ध पर रीसेट करना चाहते हैं, तो मेरे लिए अब तक क्या काम करता है:
अपने रीमोट्स की जांच करें, सुनिश्चित करें कि आपके अपस्ट्रीम और git remote add upstream <insert URL>
ओरिजिनल वही हैं जो आप उम्मीद करते हैं, यदि अपेक्षित नहीं है , तो उपयोग करें , जैसे कि मूल GitHub रेपो जो आपने से लिया था, और / या git remote add origin <insert URL of the forked GitHub repo>
।
git remote --verbose
git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force
GitHub पर, आप स्थानीय कार्य के रूप में उसी नाम से शाखा की जांच कर सकते हैं, ताकि वहां कार्य को बचाया जा सके, हालांकि यह आवश्यक नहीं है कि मूल विकास में स्थानीय सहेजे गए कार्य शाखा के समान परिवर्तन हों। मैं एक उदाहरण के रूप में विकसित शाखा का उपयोग कर रहा हूं, लेकिन यह किसी भी मौजूदा शाखा का नाम हो सकता है।
git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop
फिर अगर आपको इन परिवर्तनों को किसी अन्य शाखा में विलय करने की आवश्यकता है, जहां किसी भी तरह के संघर्ष हैं, तो विकास, उपयोग में परिवर्तन को संरक्षित करना:
git merge -s recursive -X theirs develop
उपयोग करते समय
git merge -s recursive -X ours develop
ब्रांच_नाम के परस्पर विरोधी परिवर्तनों को संरक्षित करने के लिए। अन्यथा के साथ एक mergetool का उपयोग करें git mergetool
।
एक साथ सभी परिवर्तनों के साथ:
git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;
ध्यान दें कि अपस्ट्रीम / डेवलपमेंट के बजाय आप एक प्रतिबद्ध हैश, अन्य शाखा का नाम आदि का उपयोग कर सकते हैं, एक CLI टूल का उपयोग करें जैसे ओह माय ज़श यह जांचने के लिए कि आपकी शाखा हरे रंग का संकेत दे रही है कि कमिट करने के लिए कुछ नहीं है और वर्किंग डायरेक्टरी क्लीन है ( जिसकी पुष्टि हो या उसके द्वारा भी सत्यापित हो git status
)। ध्यान दें कि यह वास्तव में, विकास को अपस्ट्रीम के अगर वहाँ कुछ भी स्वचालित रूप से एक प्रतिबद्ध से, जैसे यूएमएल चित्र, लाइसेंस हेडर, आदि जोड़ा है की तुलना करता जोड़ सकते हैं ताकि मामले में, आप तो परिवर्तन पर खींच सकता है origin develop
के लिए upstream develop
, यदि आवश्यक हो तो।
git status
आपकी दूसरी कमांडgit reset --hard HEAD
विफल रही। आपने हालांकि इसका उत्पादन नहीं किया, लेकिन इसका पेस्ट नहीं किया। → अधूरा सवाल।