पुल रिक्वेस्ट फ्लो


आप अपनी स्वयं की शाखा पर एक फीचर पर काम कर रहे हैं, और यह तैयार है। प्रोजेक्ट साझा किया गया है: अन्य लोग भी इसमें योगदान देते हैं, इसलिए आप सीधे main में पुश नहीं करते और सर्वश्रेष्ठ की आशा नहीं करते। आप चाहते हैं कि परिवर्तन की समीक्षा की जाए, यदि आवश्यक हो तो चर्चा की जाए, और इसे इस तरह से मर्ज किया जाए कि बाकी टीम देख सके। वह पूरा रास्ता, आपकी मशीन पर एक शाखा से लेकर कोड main में लैंड करने तक, पुल रिक्वेस्ट फ्लो है, और यह वह तरीका है जिससे GitHub पर लगभग हर टीम परिवर्तन प्राप्त करती है। इसका Git साइड केवल पिछले अध्यायों से कमांड का उपयोग करता है, एक शाखा, एक कमिट, और एक पुश:
$ git switch -c add-five-day-forecast
Switched to a new branch 'add-five-day-forecast'
$ git add src/forecast.js
$ git commit -m "Add five-day forecast panel"
$ git push -u origin add-five-day-forecast
Branch 'add-five-day-forecast' set up to track 'origin/add-five-day-forecast'.वह पुश आपकी शाखा को GitHub में भेजता है। अभी तक कुछ भी मर्ज नहीं हुआ है, और न ही कुछ भी समीक्षा के लिए प्रस्तावित किया गया है। अगला कदम, पुल रिक्वेस्ट खोलना, GitHub की वेबसाइट पर होता है।
जब आप पुल रिक्वेस्ट खोलते हैं तो क्या होता है
GitHub पर, ऊपर दिए गए पुश के बाद, आप आमतौर पर अपनी नई शाखा की तुलना main से करने की पेशकश करने वाला एक बैनर देखेंगे। इस पर क्लिक करें, एक शीर्षक और संक्षिप्त विवरण लिखें कि क्या बदला और क्यों, और यह पृष्ठ खोलें जो यह बनाता है। वह पृष्ठ एक पुल रिक्वेस्ट है, जिसे अक्सर PR में संक्षिप्त किया जाता है: एक शाखा को दूसरे में मर्ज करने का अनुरोध, जिसके साथ एक चलती हुई बातचीत जुड़ी होती है।
एक पुल रिक्वेस्ट एक मर्ज का प्रस्ताव देती है और अनुमोदन की प्रतीक्षा करती है। कोई, शायद आप, शायद एक टीम का सदस्य, परिवर्तन को पढ़ता है, टिप्पणियां छोड़ता है, और केवल जब यह सही दिखता है तो इसे मर्ज करता है। जब तक ऐसा नहीं होता, आपकी शाखा और main बिल्कुल वैसे ही रहते हैं जैसे वे पहले थे।
फोर्क बनाम शाखा
एक शाखा से पुल रिक्वेस्ट खोलना तब काम करता है जब आपके पास रिपोजिटरी तक लिखने की पहुंच हो, जो आपकी स्वयं की टीम के प्रोजेक्ट्स पर सामान्य स्थिति है। एक प्रोजेक्ट में योगदान देने के लिए जिसमें आपके पास लिखने की पहुंच नहीं है, एक अतिरिक्त कदम की आवश्यकता है: एक फोर्क, आपके स्वयं के GitHub खाते के तहत रिपोजिटरी की आपकी स्वयं की प्रति।
आप अपने फोर्क के अंदर ठीक वैसे ही शाखा और कमिट करते हैं जैसे आप एक प्रोजेक्ट में करते हैं जिसका आप मालिक हैं, अपने फोर्क में पुश करते हैं, और फिर अपने फोर्क की शाखा से मूल रिपोजिटरी तक पुल रिक्वेस्ट खोलते हैं। GitHub एक ही तरीके से दोनों रिपोजिटरीज की तुलना करता है जैसे यह एक रिपोजिटरी के अंदर दो शाखाओं की तुलना करता है, इसलिए समीक्षा और मर्ज फ्लो दोनों तरीकों से समान दिखता है।
अपनी पुल रिक्वेस्ट को समीक्षा के माध्यम से प्राप्त करना
एक बार PR खुलने के बाद, यह diff के बारे में एक चलती हुई बातचीत बन जाता है। एक समीक्षक परिवर्तन को पढ़ता है, विशिष्ट पंक्तियों पर टिप्पणियां छोड़ता है, और इसे अनुमोदित करता है या परिवर्तन का अनुरोध करता है। जब परिवर्तन का अनुरोध किया जाता है, तो उसी शाखा में कमिट और पुश करते रहें: प्रत्येक पुश एक ही PR को अपडेट करता है बजाय एक नया बनाने के। एक बार समीक्षक अनुमोदित करता है और कोई भी आवश्यक जांच पास होती है, PR मर्ज करने के लिए तैयार होता है।
पुल रिक्वेस्ट मर्ज क्यों नहीं होगी
कभी-कभी PR पर मर्ज बटन ग्रे आउट होता है, और GitHub इसके बजाय एक संदेश दिखाता है: "इस शाखा के पास ऐसे संघर्ष हैं जिन्हें हल किया जाना चाहिए" या "यह शाखा आधार शाखा से पुरानी है।" दोनों संदेश एक सामान्य, ठीक किए जाने वाली स्थिति का वर्णन करते हैं: main आपकी शाखा के बाद से आगे बढ़ गया है, आमतौर पर क्योंकि किसी और का PR इस बीच मर्ज हो गया है, और आपकी शाखा को GitHub को दोनों को स्वच्छ रूप से संयोजित करने में सक्षम करने से पहले पकड़ना होगा। यह एक से अधिक योगदानकर्ता वाले किसी भी प्रोजेक्ट पर होता है, इसलिए इससे डरने के बजाय इसकी अपेक्षा करें।
इसे स्थानीय रूप से ठीक करें उसी तरीके से जैसे आप कोई भी दो शाखाओं को एक साथ लाएंगे:
$ git switch add-five-day-forecast
$ git fetch origin
From github.com:mara-chen/weather-app
9f8e7d6..b7c9e21 main -> origin/main
$ git merge origin/mainअगर कुछ भी ओवरलैप नहीं होता है, तो मर्ज अपने आप पूरा हो जाता है और आप पुश करते हैं, और PR अपडेट होता है और बटन अनलॉक होता है। अगर एक ही पंक्तियां दोनों तरफ बदल गईं, तो Git आपको फ़ाइल में संघर्ष को चिह्नित करता है जिसे आप ठीक वैसे ही हल कर सकते हैं जैसे मर्ज करना और संघर्ष में कवर किया गया है: फ़ाइल खोलें, संघर्ष मार्कर को आप चाहते हैं परिणाम के लिए संपादित करें, फिर git add और git commit मर्ज को समाप्त करने के लिए, और फिर से पुश करें।
एक अटकी हुई पुल रिक्वेस्ट को पकड़ने या इसके संघर्ष को हल करने की आवश्यकता है।
main के पीछे है या इसके साथ एक संघर्ष है। कुछ भी टूटा नहीं है। अपनी शाखा को स्विच करें, प्राप्त करें, और main को मर्ज करें, किसी भी संघर्ष को हल करते हुए जैसे आप अन्यत्र करते हैं, फिर फिर से पुश करें। पुल रिक्वेस्ट क्या है, हुड के नीचे
एक पुल रिक्वेस्ट एक Git ऑब्जेक्ट नहीं है, और कोई git कमांड नहीं है जो एक को बनाता है। Git और GitHub एक ही चीज़ नहीं हैं: Git केवल कमिट, शाखाओं, और अन्य रेफ्स के बारे में जानता है (एक रेफ एक नाम है जो एक कमिट की ओर इशारा करता है)। GitHub दो रेफ्स की तुलना करके पूरे PR पृष्ठ, टिप्पणियां, और मर्ज बटन बनाता है: आपकी शाखा (head) और जिस शाखा में आप मर्ज कर रहे हैं (base, आमतौर पर main)। यह तुलना है कि आप GitHub की वेबसाइट पर (या GitHub के अपने कमांड-लाइन टूल या API के माध्यम से) पुल रिक्वेस्ट खोलते हैं, और कभी भी एक सादे git कमांड के साथ नहीं।

