GitHub पुल अनुरोध जो पहले से ही लक्ष्य शाखा में हैं दिखा रहा है




merge commit (6)

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

मैंने स्थानीय रूप से पुल अनुरोध की भी जाँच की है और यह केवल संयुक्त-विलय किए गए कमिट को दिखाता है।


आपको अपनी ~/.gitconfig फ़ाइल में निम्न जोड़ना होगा:

[rebase]
    autosquash = true

यह स्वचालित रूप से वही प्राप्त करेगा जो यह उत्तर दिखाता है।

मुझे यह here से मिला।


इसके अलावा किसी और के लिए और GitHub Pull अनुरोध व्यवहार से भ्रमित होने के लिए, मूल कारण यह है कि एक PR स्रोत शाखा के सामान्य पूर्वज और लक्ष्य शाखा के खिलाफ स्रोत शाखा टिप का एक भिन्न है। इसलिए यह आम पूर्वज तक स्रोत शाखा पर सभी परिवर्तन दिखाएगा और लक्ष्य शाखा पर होने वाले किसी भी परिवर्तन को ध्यान में नहीं रखेगा।

अधिक जानकारी यहां उपलब्ध है: https://developer.atlassian.com/blog/2015/01/a-better-pull-request/

सामान्य पूर्वज आधारित अंतर खतरनाक लगते हैं। काश GitHub के पास अधिक मानक 3-तरफा मर्ज-आधारित PR बनाने का विकल्प होता।


ऐसा लगता है कि पुल अनुरोध लक्ष्य शाखा में परिवर्तनों का ट्रैक नहीं रखता है (मैंने GitHub समर्थन से संपर्क किया, और इसे 18 नवंबर 2014 को एक प्रतिक्रिया मिली, यह बताते हुए कि यह डिजाइन द्वारा है)।

हालाँकि, आप इसे निम्न करके आपको अद्यतन बदलाव दिखाने के लिए प्राप्त कर सकते हैं:

http://githuburl/org/repo/compare/targetbranch...currentbranch

आवश्यकतानुसार githuburl , org , repo , targetbranch और currentbranch को बदलें।

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

क्या आप वाकई आधार को बदलना चाहते हैं?

पुरानी आधार शाखा के कुछ कमिट को टाइमलाइन से हटाया जा सकता है, और पुरानी समीक्षा टिप्पणियां पुरानी हो सकती हैं।

और पीआर में दो लॉग एंट्री छोड़ेंगे :


मैं इसके पीछे सिद्धांत के बारे में बिल्कुल निश्चित नहीं हूं। लेकिन मैंने इसे कई बार प्राप्त किया और निम्न कार्य करके इसे ठीक करने में सक्षम हुआ।

git pull --rebase

यह आपके मूल रेपो मास्टर शाखा से परिवर्तन लाएगा और मर्ज करेगा (यदि आपके पास इस ओर इशारा है)

फिर आप अपने परिवर्तनों को अपने गिथब क्लोन क्लोन रिपॉजिटरी (लक्ष्य) पर बलपूर्वक धकेलें

git push -f origin master

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


यहाँ एक अच्छा समाधान है। master अलावा किसी अन्य के लिए बेस शाखा को बदलने के लिए GitHub में PR को देखने पर Edit बटन का उपयोग Edit । फिर इसे master वापस स्विच करें और यह अब सही ढंग से केवल सबसे हाल के परिवर्तनों से बदलाव दिखाएगा।


योग करने के लिए, GitHub प्रतिबद्ध इतिहास को स्वचालित रूप से पुल अनुरोधों में वापस नहीं करता है। सबसे सरल उपाय हैं:

समाधान 1: रिबास

मान लीजिए कि आप feature-01 से master में विलय करना चाहते हैं:

git fetch origin
git checkout feature-01
git rebase origin/master
git push --force

यदि आप कांटे पर काम कर रहे हैं, तो आपको ऊपर की upstream origin को बदलने की आवश्यकता हो सकती है। देखें कि मैं एक GitHub रिपॉजिटरी को कैसे अपडेट करूं? मूल भंडार की दूरस्थ शाखाओं पर नज़र रखने के बारे में अधिक जानने के लिए।

समाधान 2: एक नया पुल अनुरोध बनाएँ

मान लीजिए कि आप इंट्रो master को feature-01 से मर्ज करना चाहते हैं:

git checkout feature-01
git checkout -b feature-01-rebased
git push -u origin feature-01-rebased

अब feature-01-rebased लिए पुल अनुरोध खोलें और feature-01 लिए एक बंद करें।





pull-request