मैं अभी हाल ही में इस विषय पर blogged में दिखाई देगा:
हम कैसे तारीख तक इस सुविधा शाखा रहते हो? नवीनतम अपस्ट्रीम कामों को विलय करना आसान है, लेकिन आप विलय प्रतिबद्धता से बचना चाहते हैं, क्योंकि अपस्ट्रीम पर धकेलने पर इसकी सराहना नहीं की जाएगी: फिर आप अपस्ट्रीम परिवर्तनों को प्रभावी ढंग से फिर से कर रहे हैं, और उन अपस्ट्रीम कामों को एक नया हैश मिलेगा (क्योंकि वे एक नया माता पिता प्राप्त करते हैं)। यह विशेष रूप से महत्वपूर्ण है, क्योंकि मर्ज किए गए काम आपके गिटब पुल अनुरोध में दिखाई देंगे जब आप उन अद्यतनों को अपनी व्यक्तिगत जिथब फीचर शाखा में दबाएंगे (भले ही आप पुल अनुरोध जारी करने के बाद ऐसा करते हैं।)
यही कारण है कि हमें आवश्यकता है बजाय विलय की rebase करने के लिए:
git co devel #devel is ansible's HEAD aka "master" branch
git pull --rebase upstream devel
git co user-non-unique
git rebase devel
दोनों रिबेस विकल्प और Git करने के लिए आदेश rebase अपने पेड़ को साफ रखने होगा, और करता विलय होने से बचने के। लेकिन ध्यान रखें कि वे पहले हैं (जिनके साथ आपने अपना पहला पुल अनुरोध जारी किया है) जिन्हें पुनर्जीवित किया जा रहा है, और जिनके पास अब एक नया प्रतिबद्ध हैश है, जो मूल हैश से अलग है जो अभी भी आपके रिमोट जिथब रेपो शाखा में है ।
अब, उन अपडेट को आपकी व्यक्तिगत गीथब फीचर शाखा में धक्का देना यहां विफल हो जाएगा, क्योंकि दोनों शाखाएं अलग-अलग हैं: स्थानीय शाखा पेड़ और रिमोट शाखा पेड़ उन अलग-अलग प्रतिबद्ध हैंश के कारण "सिंक से बाहर" हैं। गिट आपको पहली गिट खींचने के लिए बताएगा - फिर से दबाएं, फिर फिर से धक्का दें, लेकिन यह आपके इतिहास को फिर से लिखने के बाद एक आसान फास्ट-फॉरवर्ड पुश नहीं होगा। ऐसा मत करो!
समस्या यह है कि आप फिर से अपनी पहली बदली हुई कमेट्स को मूल रूप से प्राप्त करेंगे, और वे आपकी स्थानीय शाखा के शीर्ष पर विलय हो जाएंगे। सिंक स्थिति से बाहर होने के कारण, यह पुल साफ़ रूप से लागू नहीं होता है। आपको एक b0rken इतिहास मिलेगा जहां आपका काम दो बार दिखाई देगा। जब आप इसे अपनी जिथब फीचर शाखा में डाल देंगे, तो वे बदलाव मूल पुल अनुरोध पर दिखाई देंगे, जो बहुत बदसूरत हो जाएगा।
AFAIK, वास्तव में इसका कोई बिल्कुल साफ समाधान नहीं है।
प्रति Git-धक्का के रूप में (1):: सबसे अच्छा समाधान मैंने पाया अपने GitHub शाखा करने के लिए अपने स्थानीय शाखा धक्का (वास्तव में एक गैर तेजी से orward अद्यतन के लिए मजबूर) के लिए मजबूर करने के लिए है
Update the origin repository’s remote branch with local branch, allowing non-fast-forward updates. This can leave unreferenced commits dangling in the origin repository.
तो डॉन 'टी खींच, सिर्फ इस तरह धक्का मजबूर:
git push svg +user-non-unique
या:
git push svg user-non-unique --force
यह वास्तव में स्पष्ट रूप से overwrit होगा आपकी स्थानीय शाखा में सब कुछ के साथ, आपकी रिमोट शाखा। रिमोट स्ट्रीम (और विफलता के कारण) में रहने वाली गतिविधियां वहां रहेंगी, लेकिन प्रतिबद्धता को लटकाना होगा, जो अंततः गिट-जीसी (1) द्वारा हटा दिया जाएगा। कोई बड़ी बात नहीं।
जैसा कि मैंने कहा, यह AFAICS सबसे स्वच्छ समाधान है। इसका नकारात्मक पक्ष यह है कि आपका पीआर उन नवीनतम प्रतिबद्धताओं के साथ अपडेट किया जाएगा, जो बाद की तारीख प्राप्त करेंगे, और पीआर के टिप्पणी इतिहास में सिंक से बाहर दिखाई दे सकते हैं। कोई बड़ी समस्या नहीं है, लेकिन संभावित रूप से भ्रमित हो सकता है।
यहां आने वाले कुछ लोग यह देख सकते हैं कि यह उनके परिदृश्य को बेहतर तरीके से फिट करता है: http://stackoverflow.com/questions/9790448/how-to-update-a-pull-request – AaronLS
मुझे प्रश्न/उत्तर स्पष्ट का यह संस्करण भी मिला: http://stackoverflow.com/questions/7947322/preferred-github-workflow-for-updating-a-pull-request-after-code-review?rq=1 –