2013-07-25 11 views
29

पर गिट काम करने के लिए कैसे करें मेरे पास एक गिट रिपो में एक शाखा और एक फीचर शाखा है। मैंने विकसित करने के लिए एक प्रतिबद्धता जोड़ा और अब मैं चाहता हूं कि मेरी फीचर शाखा में विलय किया जाए। अगर मैं यहविकास शाखा में एक फीचर शाखा

git checkout feature 
git merge develop 

मैं एक विलय प्रतिबद्धता के साथ समाप्त होता हूं। चूंकि मैं अक्सर अपनी फीचर शाखा में विकसित होने पर नई प्रतिबद्धताओं को विलय कर दूंगा, इसलिए मैं इन सभी अनावश्यक विलयों से बचना चाहता हूं। मैंने यह answer देखा है जो git rebase develop करने का सुझाव देता है लेकिन यह मेरे शाखा मार्ग को बहुत दूर करने के लिए समाप्त होता है और रिबेस विफल हो जाता है।

अद्यतन: क्या मैं कर रहा समाप्त हो गया था

git checkout feature 
git merge develop # this creates a merge commit that I don't want 
git rebase # this gets rid of the merge commit but keeps the commits from develop that I do want 
git push 

अद्यतन: मैं सिर्फ देखा है कि मूल पर एक अलग हैश का विकास के लिए प्रतिबद्ध हो जाता है जब मैं तो सुविधा शाखा को rebase मर्ज। मुझे नहीं लगता कि मैं यही चाहता हूं क्योंकि आखिरकार मैं फीचर को वापस विकसित कर दूंगा और मुझे लगता है कि यह अच्छा नहीं खेलेंगे।

+0

हम्म, अच्छी तरह से मुझे पता है कि जब आप अपनी शाखा पर इतने सारे काम नहीं करते हैं, तो आप रिबेज करते समय अपने साथियों को "स्क्वैश" कर सकते हैं। Http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html देखें। – Houdini

+4

रीबेजिंग * उत्तर * है, अगर यह आपके लिए काम नहीं कर रहा है, तो एक और सवाल है जिसके बारे में आपको पूछना चाहिए * क्यों * यह काम नहीं कर रहा है। – meagar

उत्तर

29

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

यदि आपकी सुविधा शाखा पूरी तरह से स्थानीय है, तो आप इसे विकसित करने के शीर्ष पर पुन: प्राप्त कर सकते हैं। हालांकि, यह समझने में समय लगता है कि रीबेज कैसे काम करता है, और इससे पहले कि आप दुर्घटनाग्रस्त या गिराए गए कामों का आकलन करना काफी आसान हो। विलय करना शोर दिख सकता है लेकिन विलय की गारंटी हमेशा सुरक्षित और अनुमानित होने की गारंटी है।

एक बेहतर दृश्य के लिए, सब कुछ एक ग्राफ में एक साथ प्रवेश करने का प्रयास:

git log --all --graph --oneline --decorate 

यह भी विचार कर रहा है कि क्या तुम सच में जरूरतdevelop पर प्रतिबद्ध feature में विलय के लायक है। अक्सर वे चीजें हैं जिन्हें feature तक अलग छोड़ दिया जा सकता है जब बाद में develop में विलय हो जाता है।

यदि आप नियमित रूप से पाते हैं कि developfeature पर कोड की आवश्यकता है तो यह एक संकेत हो सकता है कि आपकी फीचर शाखाएं बहुत लंबी चल रही हैं। आदर्श रूप से सुविधाओं को इस तरह से विभाजित किया जाना चाहिए कि वे स्वतंत्र रूप से काम पर नियमित रूप से एकीकरण की आवश्यकता के बिना काम कर सकते हैं।

11

आप केवल एक develop शाखा से प्रतिबद्ध चाहते हैं तो आप इसे अपने feature शाखा में चेरी चुन सकते हैं:

git checkout feature 
git cherry-pick -x <commit-SHA1> 

प्रतिबद्ध अपनी शाखा के शीर्ष पर एक नया एक के रूप में लागू किया जाएगा (बशर्ते ऐसा नहीं एक संघर्ष उत्पन्न नहीं करते हैं), और जब आप feature शाखा गिट वापस विलय करेंगे तो बिना किसी संघर्ष के इसका सामना करेंगे।

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