2009-06-03 9 views
9

हम एक केंद्रीय गिट भंडार का उपयोग कर रहे हैं जिसे मैंने क्लोन किया है और मैं स्थानीय शाखा पर काम कर रहा हूं।स्थानीय गिट शाखा को कुशलतापूर्वक रीबेज और पुश करने के लिए कैसे?

जब मैं केंद्रीय भंडार में अपने परिवर्तनों को उपलब्ध कराना चाहते हैं, मैं निम्न कमांड (mybranch पर शुरू) जारी करने के लिए है:

#Stash local changes not yet ready for checkin 
git stash 

#Make sure we have all changes from the central repository 
git checkout master 
git pull 

#Rebase local changes 
git checkout mybranch 
git rebase 

#Push changes 
git checkout master 
git merge mybranch 
git push 

#Back to my branch and continue work 
git checkout mybranch 
git stash apply 

मुझे पता करना चाहते हैं तो यह कम उपयोग करना संभव है एक ही लक्ष्य को पूरा करने के लिए गिट कमांड। master और mybranch के बीच कई स्विच विशेष रूप से परेशान हैं, क्योंकि हमारे भंडार बहुत बड़े हैं इसलिए उन्हें कुछ समय लगता है।

उत्तर

13

से धक्का कर सकते हैं करने के लिए कोई जरूरत नहीं है अगर आपको इसे अपडेट करने की आवश्यकता नहीं है तो यह आपकी स्थानीय मास्टर शाखा को स्पर्श करें और ऐसा लगता है कि आपकी बहुत सारी अनावश्यक शाखा स्विचिंग हो रही है।

यह एक अधिक न्यूनतम वर्कफ़्लो है।

git fetch 

# ensure that everything is committed 
# perhaps git commit -a is required... 

git rebase origin/master 


# If you don't want to push the very latest commits you might 
# want to checkout a parent or ancestor of the current commit 
# to test that the proposed commit passes tests, etc. 
# e.g. git checkout HEAD~n 

# push to the remote master 
git push origin HEAD:master 

# if you checked out a parent, go back to the original branch 
git checkout mybranch 

आप माता-पिता के बारे में सुपर आश्वस्त प्रतिबद्ध हैं, तो आप चेकआउट चरणों को छोड़ सकते हैं और सिर्फ निम्नलिखित करते हैं, लेकिन मैं दृढ़ता से इसके खिलाफ सलाह देते हैं। अवांछित कामों को प्रकाशित करना 'सर्वोत्तम अभ्यास' नहीं है।

git push origin HEAD^:master 
1

आप पुल गठबंधन और एक में rebase सकता है:

Git --rebase मास्टर खींच

लेकिन कुल मिलाकर, हाँ, मेरे अनुभव से यह इन सभी आदेशों शामिल है।

अपनी रिपोजिटरी को साफ रखने के लिए, अक्सर "गिट जीसी" चलाने में मददगार होता है जो अप्रयुक्त वस्तुओं को हटा देगा। इसे शाखा स्विचिंग समय पर काटा जाना चाहिए।

0

मैं सामान्य रूप से करता हूं।

git co master 
git pull 
git rebase master mywrk # fix conflicts if any 
git rebase mywrk master 
git push 

यदि आप इस तरह से पसंद करते हैं, तो आप टाइपिंग को बचाने के लिए उपनाम परिभाषित कर सकते हैं।

6

मास्टर और माइब्रैंच शाखाओं दोनों पर खींच करना आवश्यक नहीं है। जब से तुम इस तरह एक अच्छा नागरिक होने और तेजी से आगे अपडेट यह बहुत सीधे आगे है कर रहे हैं:

# Save local mods not ready for commit 
git stash 
# Do the pull & rebase local work assuming this is a remote tracking branch 
git pull --rebase 
git checkout master 
git merge mybranch 
git push 
बेशक

, आप भी अपने mybranch शाखा

# Save local mods not ready for commit 
git stash 
# Do the pull & rebase local work assuming this is a remote tracking branch 
git pull --rebase 
git push origin mybranch:master 
+0

"यह मानते हुए कि यह एक दूरस्थ ट्रैकिंग शाखा है" का क्या मतलब है? Mybranch एक स्थानीय शाखा है, केवल मेरे अपने भंडार में मौजूद है। क्या आपका समाधान इन परिस्थितियों में भी काम करेगा? – siebert

+0

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

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