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


136

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

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


क्या यह पीआर को विलय करने के व्यवहार को प्रभावित करता है?
नाथन हिन्ची

नहीं, सिर्फ गितुब पर अंतर।
लोबती

क्या किसी को पता है कि स्व-मेजबान गिटलैब समान व्यवहार से पीड़ित है?
जेफ वेलिंग

2
मेरा सुझाव है कि हम सभी इस व्यवहार को बदलने में अपनी रुचि व्यक्त करने के लिए GitHub से संपर्क करें ( support.github.com/contact )। अगर वे हमारी बात नहीं सुनते हैं तो उन्हें पता नहीं चलेगा कि यह कितना महत्वपूर्ण है और यह हमेशा के लिए इस तरह से होगा।
२.०५० पर स्टेनीबोट

जवाबों:


107

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

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

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

बदलें githuburl, org, repo, targetbranch, और currentbranchके रूप में की जरूरत है।

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

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

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

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

यहाँ छवि विवरण दर्ज करें


4
हाँ, मैंने कुछ समय पहले समर्थन से संपर्क किया और उसी प्रतिक्रिया मिली। वे इस स्थिति के लिए अनुकूलन नहीं करते हैं। थोड़ी निराशा होती है। इसके चारों ओर होने का हमारा तरीका सिर्फ रिबेस और फोर्स पुश अप करना है, या पुल को बंद करना और एक नया निर्माण करना है।
लोबती

4
यह उत्तर समस्या को ठीक नहीं करता है, लेकिन उपयोगकर्ता को सही अंतर देखने की अनुमति देता है।
फियरलेस

4
सवाल था "वे अभी भी पुल अनुरोध में क्यों दिखाई दे रहे हैं?"। यह उस सवाल का जवाब देता है।
एडम मिलरचिप

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

11
क्या इसे बदलने के लिए कोई प्रिय-गिठब अनुरोध है?
vossad01

87

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


4
मुझे आश्चर्य है कि अधिक लोग इस समाधान को स्वीकार नहीं करते हैं। मुझे संदेह है कि आउट ऑफ डेट पुल का अनुरोध ठीक रहेगा, लेकिन मुझे पसंद नहीं आया कि GitHub सभी आउट ऑफ डेट फाइलों को दिखाता है, इसलिए मैंने इसका उपयोग किया और यह दोनों कमेंट्री करता है और केवल विलय होने वाले वास्तविक परिवर्तनों को दिखाता है । धन्यवाद!
तारानकी

2
मेरे लिए काम नहीं किया।
शशांक

लानत है यह काम!
अनुराग हजरा

तीन साल बाद और यह अभी भी एक महान समाधान है। और देखो किसी ने कुछ घंटे पहले ही टिप्पणी की थी ^ ^ ^ ^
रिकार्डो सपोर्टा

32

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

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

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

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

यदि आप कांटे पर काम कर रहे हैं तो आपको originऊपर से बदलने की आवश्यकता हो सकती है upstream। देखें कि मैं एक 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


4
एक रिबेस कमिट हैश को बदल देता है, तो क्या यह मौजूदा समीक्षा टिप्पणियों को समाप्त कर देगा?
haridsv


पुश -फोर्स करते समय कुछ भी देखने के लिए?
पॉल बेंडेविस

1
@haridsv यह मेरा अनुभव नहीं है। मैं अक्सर मध्य समीक्षा की समीक्षा करता हूं और टिप्पणियां गुम नहीं होती हैं। हालाँकि मैं PR के परिवर्तनों का इतिहास खो देता हूँ
joel

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

17

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

[rebase]
    autosquash = true

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

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


2
लानत है, मैं गलती से वोट डाउन पर क्लिक किया। इस जवाब से मुझे मदद मिली। कृपया मुझे इसे बदलने दें।
हेक्टर

@hosein इसके लिए जाओ। आप इसे करने में सक्षम होना चाहिए।
माटूस पिओत्रोस्की

1
मुझे लगता है कि यह या तो स्वीकृत उत्तर होना चाहिए, या स्वीकृत उत्तर में शामिल होना चाहिए। यह उस परिणाम को प्राप्त करता है जिसकी मुझे तलाश थी!
रोनाल्ड री

1
@RonaldRey गिट रीबासिंग एक सार्वभौमिक समाधान नहीं है, क्योंकि इसमें इतिहास को संपादित करना शामिल है। यदि हर कोई निजी कांटे पर काम कर रहा है जो कभी भी दूसरों द्वारा क्लोन नहीं किया जाता है, तो यह ठीक है, लेकिन जैसे ही कोई व्यक्ति आपके भंडार को क्लोन करता है और आप फिर इतिहास को संपादित करते हैं, आप अलग-अलग इतिहासों के साथ समाप्त होते हैं।
एडम मिलरचिप

14

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

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

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


1
आपके द्वारा उल्लिखित कारण सही लगता है, लेकिन मैं उलझन में हूं क्योंकि आम तौर पर जब भी मास्टर अपडेट होता है, तो मैं अपनी शाखा में परिवर्तन को वापस मर्ज कर देता हूं ... git चेकआउट माय-ब्रांच -> git मर्ज मास्टर । पुल अनुरोध तुरंत ताज़ा हो जाता है। क्या आम पूर्वज भी अपडेट हो जाते हैं?
G.One

2
यह व्यवहार तब होता है जब मर्ज के बजाय
रिबास करते हैं

1
@ G.One, वास्तव में देर से जवाब, लेकिन हाँ - यदि आप उस मास्टर शाखा से अपनी स्रोत शाखा में विलय करते हैं, तो आपने परिभाषा के द्वारा सामान्य पूर्वजों को अपडेट किया है। यह आपके द्वारा विलय किए गए मास्टर पर प्रतिबद्ध है।
डेविड के। हेस

13

इसे ठीक करने का एक तरीका git rebase targetbranchउस पीआर में है। फिर git push --force targetbranch, फिर गितुब सही तरीके से दिखाएगा और अलग होगा। यदि आप नहीं जानते कि आप क्या कर रहे हैं तो इससे सावधान रहें। हो सकता है कि रिबास करने के लिए पहले एक परीक्षण शाखा की जांच git diff targetbranchकरें फिर यह सुनिश्चित करें कि यह अभी भी वही है जो आप चाहते हैं।


10

यह GitHub के साथ होता है जब आप स्क्वैश को लक्षित शाखा से विलय कर देते हैं।

मैं स्क्वैश का उपयोग कर रहा था और लक्ष्य शाखा से विलय सहित डिफ़ॉल्ट मर्ज रणनीति के रूप में गितूब के साथ विलय कर रहा था। यह एक नई प्रतिबद्धता का परिचय देता है और GitHub यह स्वीकार नहीं करता है कि यह स्क्वैश कमिट वही है जो पहले से ही मास्टर में है (लेकिन अलग-अलग हैश के साथ)। Git इसे ठीक से हैंडल करता है लेकिन आप GitHub में फिर से सभी बदलाव देखते हैं, जिससे यह समीक्षा करने के लिए परेशान करता है। इसका उपाय यह है कि स्क्वैश और मर्ज की बजाय ऊपर की ओर खींचे गए इन में से एक नियमित मर्ज करें। जब आप निर्भरता के रूप में किसी अन्य शाखा में आपका विलय करना चाहते हैं,git merge --squash और एक बार मास्टर से खींचने से पहले उस एकल वचन को वापस करते हैं कि दूसरी शाखा ने वास्तव में इसे मास्टर बनाया है।

EDIT: एक और उपाय बल और बल पुश करने के लिए है। स्वच्छ लेकिन लिखित इतिहास


1
धन्यवाद @achille, यह वास्तव में मेरी तरफ मुद्दा था। स्क्वैश मर्ज को अक्षम करने के बाद इसे हल किया जाता है।
अश्विन

0

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

git pull --rebase

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

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

git push -f origin master

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



-1

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

git add .  && git commit -a --allow-empty-message -m '' && git reset --soft HEAD~2 &&
git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})"

मैं कोई संघर्ष नहीं कर रहा हूँ, तुम जाने के लिए अच्छा कर रहे हैं!

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