GitHub पर कई पुल अनुरोधों को कैसे खोलें


139

जब मैं GitHub पर एक पुल अनुरोध खोलता हूं । सभी मेरे अंतिम अनुरोध के बाद से शुरू होते हैं और सभी नए स्वचालित रूप से इस अनुरोध में जोड़ दिए जाते हैं

मैं नियंत्रित नहीं कर सकता कि कौन से कमिट जोड़े गए हैं और कौन से नहीं हैं।
जब मैं एक और पुल अनुरोध को खोलने की कोशिश करता हूं, तो मुझे "उफ़ मिलता है! पहले से ही एक पुल अनुरोध" त्रुटि है।

क्या कमांड लाइन के साथ गड़बड़ करने के बिना कई पुल अनुरोधों को खोलने का कोई आसान तरीका है?

जवाबों:


116

पुल अनुरोध एक शाखा पर आधारित हैं।
एकाधिक आवागमन के लिए एक पुल अनुरोध खोलने का एकमात्र तरीका है:

  1. उन्हें अपनी शाखा में अलग कर दें ।
  2. वहां से पुल अनुरोधों को खोलें।

3
ठीक है, शांत, मैंने सोचा कि यह केवल मास्टर के साथ था। तो आपके कहने का मतलब यह है कि मैं कई शाखाएँ बना सकता हूँ (यानी: git flow features) और उनमें से प्रत्येक के लिए पुल अनुरोध ... कोशिश करने जा रहा हूँ!
ज़ियान जुनायडेन

8
मैंने अभी पाया कि शाखा ने पिछले कमिट्स के इतिहास को संरक्षित किया है, इसलिए अपस्ट्रीम के खिलाफ एक पुल अनुरोध में अभी भी सभी कमिट शामिल हैं।
eel ghEEz

2
हाय @ eel-gheez, क्या आपने पता लगाया कि इस बारे में क्या करना है? दिखाए जाने वाले अन्य शाखाओं से परिवर्तन के बिना पृथक पीआर कैसे बनाएं?
जोनाथन क्रॉस

3
यह समस्या को हल नहीं करता है: जब मैं एक पीआर बनाने की कोशिश करता हूं तो दोनों शाखाएं (कम से कम एक प्रतिबद्ध प्रत्येक के साथ) की तुलना की जाती हैं। मैं क्या गलत कर रहा हूं?
मर्सोस

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

11

ऐसा करने का सबसे आसान तरीका है हब कमांड ( https://github.com/defunkt/hub )।

अपनी विषय शाखा से (इस उदाहरण में "सुविधा") जिसे आप के लिए एक पुल अनुरोध बनाना चाहते हैं, आप बस चला सकते हैं:

git pull-request

(अपनी शाखा को पहले धकेलना याद रखें!)

और यह "Your_USER: फीचर" के लिए GitHub पर एक नया पुल अनुरोध खोलेगा।

यदि आपने पहले ही GitHub पर एक समस्या बना ली है, तो आप उस मौजूदा मुद्दे पर एक पुल अनुरोध भी संलग्न कर सकते हैं (कुछ आप वेब UI से नहीं कर सकते हैं):

$ git pull-request -i 123
[ attached pull request to issue #123 ]

2

आप वास्तव में एक और शाखा बनाए बिना ऐसा कर सकते हैं, लेकिन यह चारों ओर खेलने का एक सा लगता है।
यहाँ कदम है:

  1. उन दो प्रतिबद्ध सीमाओं को पहचानें जिन्हें आप खींचना चाहते हैं। यहाँ मैं एक उदाहरण के लिए क्या उपयोग करूँगा:
    (अन्य / मास्टर) A -> B -> C -> D -> E (तुम्हारा / स्वामी)
    मान लें कि आप एक अनुरोध में B और C को खींचना चाहते हैं, और D & ई दूसरे में।
  2. एक पुल अनुरोध करें। बाईं ओर ("आधार") प्रतिबद्ध होना चाहिए दाएं पक्ष ("सिर") के लिए, सी की प्रतिबद्ध संख्या में टाइप करें।
  3. अपने पहले अनुरोध के लिए विवरण लिखें।
  4. दूसरा निवेदन करें। आधार के लिए, सी की प्रतिबद्ध संख्या में टाइप करें, और सिर के लिए, ई (आपका / मास्टर) डालें।
  5. वर्णन लिखें।

जैसा कि मैं इसे देखता हूं, पुल अनुरोध एक बिंदु के रूप में प्रतिबद्ध सी देखता है। या कुछ और।


आपको अन्य / मास्टर को बाईं ओर छोड़ना होगा, भले ही वह आपका / स्वामी से एक प्रतिबद्ध संख्या जोड़ रहा हो। साथ ही यह विधि आपको मर्ज अनुरोध में नए कमिट जोड़ने की अनुमति नहीं देती है, यदि कुछ और परिवर्तनों की आवश्यकता होती है।
Frisco

मैंने इस उत्तर के लिए एक प्रकार का अनुवर्ती पोस्ट किया, गितुब पर कुछ जानकारी के विपरीत, stackoverflow.com/questions/23159860
मार्क बेनेट

मैं यह देख सकता हूं कि यह दो पीआरएस बनाएगा जो सही दिखते हैं, जिसमें वे प्रत्येक में वास्तव में वांछित कमिट होते हैं। लेकिन, स्पष्ट होने के लिए, क्या यह सही काम करता है जब वे विलय हो जाते हैं? जैसा कि, मैं देख सकता हूँ कि पहला PR सही ढंग से B & C को अन्य / मास्टर में विलय करेगा। लेकिन जब दूसरा PR विलय होता है, तो यह कैसे पता चलता है कि किस शाखा को विलय करना है? (चूँकि इसे 'C' पर बनाया गया था, अन्य / गुरु पर नहीं) क्या इससे कोई फर्क नहीं पड़ता कि कौन से PR का विलय हो? (संभवतः ऐसा)
जोनाथन हार्टले

1

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


1

मैं Git और GitHub में नया हूं और ओपी के समान ही प्रश्न था।

मैंने एक हल खोजा है, जो शायद ओपी के समय उपलब्ध नहीं था।

स्थिति: आपके पास 3 परिवर्तन हैं, और आप चाहते हैं कि प्रत्येक को पिछले से बनाया जाए, और प्रत्येक का अपना पुल अनुरोध (PR) हो।

समस्या: जब आप पहला पीआर बनाते हैं जो मास्टर में विकसित करने की कोशिश करता है, तो हर चीज ठीक लगती है, लेकिन तब आप दूसरे पीआर के लिए बदलाव करते हैं, और उन्हें मर्ज करते हैं (एक ही शाखा का उपयोग करके) सभी परिवर्तन एक ही पीआर में होते हैं ।

मिनी सॉल्यूशन: एक नई शाखा बनाएँ

git branch mini_change_2
git checkout mini_change_2

अब आप कोड को GitHub पर धकेलते हैं और PR बनाते हैं, लेकिन यह mini_change_2 से मास्टर तक खींचता है, सिवाय इसके कि मास्टर में पहले PR से परिवर्तन नहीं हुए हैं, इसलिए इसमें PR1 और PR2 से सभी परिवर्तन शामिल हैं।

सर्वश्रेष्ठ समाधान: यह निर्दिष्ट करें कि आप PR2 में किस शाखा में विलय कर रहे हैं।

दूसरा PR बनाते समय केवल डिफॉल्ट्स को स्वीकार न करें, मान लें कि आप mini_chnage_2 को विकसित करने जा रहे हैं, यह केवल mini_change_2 में परिवर्तन दिखाएगा

अब एक नई शाखा mini_change_3 और PR बनाएँ जिससे mini_change_3।

समस्या तब आती है जब आप उन्हें मर्ज करना शुरू करते हैं ... लेकिन यह एक अलग तरह का व्यायाम है।

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