GitHub / BitBucket पर मर्ज-कम नरक से कैसे बचें


101

हम अपने रेपो में इस तरह के बहुत से कामों को समाप्त कर रहे हैं:

Merge branch 'master' of bitbucket.org:user/repo

ऐसा तब होता है जब कोई डेवलपर अपने स्थानीय कांटे को शीर्ष-स्तरीय रेपो में सिंक करता है।

वहाँ वैसे भी है इस मर्ज-कम नरक से बचने के लिए सभी रेपो लॉग अव्यवस्था से? क्या किसी तरह से पुल-अनुरोध शुरू करते समय कोई उनसे बच सकता है?

मुझे पता है कि मैं git rebase कर सकता हूं यदि यह केवल मेरे स्थानीय VM में किया जाता है, तो क्या GitHub / BitBucket UI में कोई समानता है?

तुम लोग यह कैसे करते हो?

जवाबों:


136

विलय से पहले रिबेस फ़ीचर शाखाओं

यदि आप मर्ज कमिट्स से बचना चाहते हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि सभी कमिट्स फास्ट-फॉरवर्ड हैं। ऐसा करने से पहले आप यह सुनिश्चित करें कि आपकी सुविधा शाखा अपने विकास की रेखा पर साफ तौर पर छूट देती है:

git checkout master
git checkout -b feature/foo

# make some commits

git rebase master
git checkout master
git merge --ff-only feature/foo

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

--ff-onlyध्वज का उपयोग करें

रिबासिंग के अलावा, --ff-onlyध्वज का उपयोग यह सुनिश्चित करेगा कि केवल तेजी से अग्रेषित किए जाने की अनुमति है। इसके बजाय मर्ज कमिटमेंट होगा तो कोई कमिट नहीं किया जाएगा। गिट-मर्ज (1) मैनुअल पेज कहता है:

केवल---ff

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


1
यह एक बेहतरीन जवाब है। मैं जितनी बार संभव हो रिबेट का उपयोग करता हूं। मैं --ff- केवल ध्वज के बारे में नहीं जानता था। बहुत अच्छा!
सिंह राशि

3
रिबेस और --ff- केवल सलाह के लिए धन्यवाद। हालांकि, जैसा कि मेरे सवाल में कहा गया है, मैं GitHub / BitBucket के UI के भीतर यह कैसे कर सकता हूं?
निकोलस

3
@ निक्लेस मुझे पूरा यकीन है कि आपको जो चाहिए वो करने के लिए आपको CLI का सहारा लेना पड़ेगा। GitHub Git की पूर्ण शक्ति को उजागर नहीं करता है; इसकी विशेषताओं का सिर्फ एक सबसेट और कुछ ग्राफिकल और सोशल-नेटवर्किंग मूल्य-वर्जन। सौभाग्य!
टॉड ए। जैकब

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

19
@CodeGnome इसे CLI के लिए "रिसोर्टिंग" नहीं कहते ... वास्तव में आपको UI का "सहारा" लेने के बारे में चेतावनी देनी चाहिए!
दरोगाओं

9

"टॉड ए। जैकब्स" ने पहले ही उल्लेख किया "रिबेस" यहां की अवधारणा है। यह चीजों को करने का एक अधिक विस्तृत तरीका है।

मान लीजिए कि आप मास्टर शाखा में हैं

$ git branch
  * master

आप एक फिक्स बनाना चाहते हैं, इसलिए एक "फिक्सब्रांच" बनाएं जो मास्टर से शाखित है

$ git checkout -b fixbranch

हो सकता है कि आपने इस शाखा में कुछ दिनों के लिए काम किया हो और एक दो कमिट किया हो।

जिस दिन आप केंद्रीय मास्टर रेपो के लिए अपने काम को आगे बढ़ाना चाहते थे! चेकआउट मास्टर और केंद्रीय मास्टर रेपो से नवीनतम परिवर्तन प्राप्त करें

$ git checkout master
$ git pull origin master

एक साफ इतिहास रखने के लिए और अपने स्थानीय रेपो में ही किसी भी तरह के संघर्ष को सुलझाने के लिए अपने फिक्सब्रांच को मास्टर के साथ रिबेस करें।

$ git checkout fixbranch
$ git rebase master

अब Fixbranch केंद्रीय मास्टर के साथ अपटूडेट है, मुझे Fixbranch को मास्टर शाखा में मर्ज करने दें

 $ git checkout master
 $ git merge fixbranch

मेरा हो गया! मुझे स्थानीय स्वामी को केंद्रीय गुरु के पास ले जाने दें

$ git push origin master

https://git-scm.com/book/en/v2/Git-Branching-Rebasing


मैं इस जवाब की सराहना करता हूं।
लासेका ०२०१३
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.