2011-05-11 14 views
23

पर पुल अनुरोध करते समय अवांछित विलय प्रतिबद्धताओं और अन्य प्रतिबद्धताओं से बचें I मैंने गिथब पर एक परियोजना को फोर्क किया।गिटहब

रिमोट अपस्ट्रीम upstream हो और मेरा रिमोट रिपोजिटरी origin हो। मेरी स्थानीय master शाखा दूरस्थ master शाखा को ट्रैक करने के लिए सेट है। फिर मैंने स्थानीय master में कुछ सामान जोड़ा, और मैं अब और फिर अपस्ट्रीम के साथ विलय कर रहा हूं।

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

उत्तर

3

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

+0

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

+0

यह वही है जो मैं पूछ रहा हूं - मुझे नहीं पता कि यह उचित तरीके से कैसे करें। –

27

विलय करने के बजाय आप रिबेज करना चाहते हैं। खींचते समय आप मैन्युअल रूप से या स्वचालित रूप से ऐसा कर सकते हैं।

git pull --rebase upstream master 
git push --force origin master 

एक बार जब आप का आपस में विलय कर हालांकि यह करने के लिए कठिन हो जाएगा शुरू कर दिया है, तो आप शाखा इससे पहले कि आप किसी मर्ज किया प्रतिबद्ध वापस रीसेट करना होगा।

+0

+1 यही वजह है कि रीबेस मौजूद है :) – ralphtheninja

+0

यह एक काम लगता है। मुझे यकीन नहीं है कि मुझे दो कदम करना है, क्योंकि हर बार जब मैं रिमोट मास्टर के साथ विलय करता हूं तो एक विलय प्रतिबद्धता होगी। गिट पुश - फोर्स समाधान के लिए –

+7

-1 गिट पुश - फोर्स समाधान के समान स्तर पर पेश किया जाना चाहिए।प्रयोक्ता को पुश-फोर्स के साथ संभावित नुकसान के बारे में चेतावनी दी जानी चाहिए जो संभावित रूप से अधिक हानिकारक है, और रेपो के अन्य उपयोगकर्ताओं को यह जानना चाहिए कि अगर वे पूरी तरह से पुश-फोर्स द्वारा हटाए गए वचन को बंद कर देते हैं तो वे सही तरीके से प्रतिक्रिया कैसे करें – prusswan

6

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

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

10

यदि मैं आपका प्रश्न समझता हूं, तो आप अपनी शाखा में किए गए इंटरमीडिएट/फेंकने वाले कामों से छुटकारा पाना चाहते हैं। कुछ इस तरह का प्रयास करें:

git checkout -b for-upstream remotes/origin/master (create a new branch from the upstream origin) 
git cherry-pick <sha-of-the-one-commit-you-want-to-submit> (fix any conflicts if necessary) 

यह आप जो सिर्फ नदी के ऊपर मास्टर शामिल + अपने 1 प्रतिबद्ध "के लिए नदी के ऊपर-" शाखा एक स्थानीय देना चाहिए। आप तब पुल अनुरोध

+0

वापस विलय करने के लिए मुझे लगता है कि पहली पंक्ति को 'गिट चेकआउट-बी ...' और 'गिट शाखा-बी' नहीं होना चाहिए ... (उस परिवर्तन को करें और मैं इसे यहां उत्तर दूंगा) – founddrama

0

यह आपके प्रश्न का उत्तर की तरह दिखता है (खंड विषय की "अपडेट 2011-04-15") के लिए है कि शाखा प्रस्तुत कर सकते हैं:

Git workflow and rebase vs merge questions

मीका की तकनीक का वर्णन स्क्वैश विलय करता है जो आपको अपनी सुविधा शाखा से परिवर्तन को मास्टर शाखा में एक ही प्रतिबद्धता के रूप में विलय करने देता है।

+0

स्क्वैश विलय मर्ज ट्रैकिंग को नष्ट कर दें और दर्द का कोई अंत नहीं हो सकता है। –