एक पुल अनुरोध से कैसे हटाएं


105

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

मुझे StackOverflow पर कुछ ऐसे ही सवाल मिले, लेकिन मैं इसमें लागू नहीं कर सकता। यह GitHub पर मेरा पहला पुल अनुरोध है इसलिए यह मेरे लिए बहुत ही अजीब है कि यह सब कैसे काम करता है।

हाइलाइट की गई प्रतिबद्धता वह है जिसे मुझे अन्य सभी सामानों को रखने और हटाने की आवश्यकता है। यह इतिहास में चौथा प्रतिबद्ध है क्योंकि मैं कुछ मर्ज सामान बनाता हूं।

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

मेरी गिट लॉग यहां छवि विवरण दर्ज करें

क्या कोई कृपया बता सकता है कि क्या चल रहा है और इस समस्या को कैसे ठीक किया जाए?


2
आपको रिबास करने की आवश्यकता है , और केवल "पिक" को "जीथब से जोड़ा गया" कमिट करें (यानी हर दूसरे कमिट के लिए लाइन्स कमेंट करें)
रोबी एवेरिल

1
आप किस शाखा पर कौन सी शाखा को पुनः स्थापित कर सकते हैं कृपया अधिक विवरण जोड़ें।
2:16 पर विस्मित

what branch= जिस शाखा पर आप काम कर रहे हैं, onto what branch= वह शाखा जिस पर आप अनुरोध कर रहे हैं
रोबी एवरिल

मैंने समझाया कि मेरे जवाब में @ रोबी एवरिल ने क्या संकेत दिया। यह अजीब है कि किसी ने भी अब तक यह समझाने वाला उत्तर नहीं लिखा।
फेर

जवाबों:


109

आपके पास इसे करने के लिए कई तकनीकें हैं।

यह पोस्ट - रिवर्ट के बारे में भाग को पढ़ें विवरण में बताएगा कि हम क्या करना चाहते हैं और इसे कैसे करना है।

यहाँ आपकी समस्या का सबसे सरल समाधान है:

# Checkout the desired branch
git checkout <branch>

# Undo the desired commit
git revert <commit>

# Update the remote with the undo of the code
git push origin <branch>

रिवर्ट कमांड मूल प्रतिबद्ध के पूर्ववत के साथ एक नई कमिट बनाएगी ।


2
क्या यह तब भी काम करता है जब हमने किसी अन्य व्यक्ति से परियोजना को छीन लिया है और पुल अनुरोध में कुछ टिप्पणियां निकालना चाहते हैं?
डॉ.अजकी

110

लोग गलत कमिटमेंट और गलत कमिट के पूर्ववत बदलाव के लिए प्रतिबद्ध नहीं देखना चाहेंगे। यह प्रदूषण इतिहास का निर्माण करता है।

यहाँ एक पूर्ववत बदलाव के साथ परिवर्तन पूर्ववत करने के बजाय गलत प्रतिबद्ध को हटाने का एक सरल तरीका है।

  1. git checkout my-pull-request-branch

  2. git rebase -i HEAD~n// जहां nअंतिम कमिट्स की संख्या है, आप इंटरएक्टिव रिबेस में शामिल करना चाहते हैं।

  3. उन कमिटों के pickसाथ बदलें dropजिन्हें आप त्यागना चाहते हैं।
  4. सुरषित और बहार।
  5. git push --force

8
यह मेरे लिए एक आकर्षण की तरह काम करता था। मेरे पास कमेंट्स का गुच्छा था जो पीआर में नहीं होना चाहिए था। मैंने सिर्फ इंटरएक्टिव रिबेट किया, उन कमिट्स को गिरा दिया और उन्हें पीछे धकेल दिया
फुलस्टैक्जाइनर

1
आप वैसे भी एक जनसंपर्क शुरू करने से पहले दूरस्थ मास्टर के साथ सिंक करना चाहिए, नहीं?
फेर

5
पुश करने के लिए मुझे करना था git push origin HEAD:myBranch --force:। लेकिन अन्यथा महान और सहायक।
स्कॉट्टीब्लाड्स

4
यह तब भी उपयोगी है जब आप GitHub में एक खुले पीआर को ठीक करना चाहते हैं, आपको बस एक मजबूर पुश करने में सक्षम होने की आवश्यकता है
व्लादिमीर हिडाल्गो

1
@jorijnsmit का मतलब है कि दौड़ने के बाद git rebase -i HEAD~<n>, फ़ाइल के शीर्ष पर <n>पाठ की प्रत्येक पंक्ति के साथ, कमिट की लाइनें होंगी pick <commit id>। डिफ़ॉल्ट के लिए प्रतिबद्ध है pick, इसलिए हर कमिट के लिए आप पाठ pickको बदलना चाहते हैंdrop
स्लिम

6

यदि आप एक कमिट निकाल रहे हैं और इसके बदलाव को रोकना नहीं चाहते हैं तो @ आफ़्टरिट का एक अच्छा समाधान है।

यदि आप उस प्रति को वर्तमान शाखा में जोड़ना चाहते हैं, लेकिन समझ में नहीं आता है कि आप वर्तमान जनसंपर्क का हिस्सा हैं, तो आप इसके बजाय निम्नलिखित कर सकते हैं:

  1. उपयोग git rebase -i HEAD~n
  2. नीचे की ओर (सबसे हाल की) स्थिति के लिए आप जो कमिट करना चाहते हैं, उसे स्वैप करें
  3. सुरषित और बहार
  4. git reset HEAD^ --softबदलावों को अनसुना करने और एक मंचित स्थिति में वापस लाने के लिए उपयोग करें।
  5. git push --forceअपने निकाले गए कमिट के बिना रिमोट ब्रांच को अपडेट करने के लिए उपयोग करें।

अब आपने अपने रिमोट से कमिटमेंट को हटा दिया होगा, लेकिन फिर भी स्थानीय स्तर पर बदलाव होंगे।


2

तो निम्नलिखित करें,

कहते हैं कि आपकी शाखा का नाम my_branch है और इसके पास अतिरिक्त आवागमन है।

  1. git checkout -b my_branch_with_extra_commits (इस शाखा को एक अलग नाम के तहत सहेज कर रखा गया)
  2. gitk (गिट कंसोल को खोलता है)
  3. आप जिस कमिटमेंट को रखना चाहते हैं, उसे देखें। उस नोट के SHA को एक नोटपैड पर कॉपी करें।
  4. git checkout my_branch
  5. gitk (इससे गिट कंसोल खुल जाएगा)
  6. आप जिस पर वापस जाना चाहते हैं उस पर राइट क्लिक करें (अपने परिवर्तनों से पहले राज्य) और " reset branch to here" पर क्लिक करें
  7. ए करें git pull --rebase origin branch_name_to _merge_to
  8. git cherry-pick <SHA you copied in step 3. >

अब स्थानीय शाखा प्रतिबद्ध इतिहास को देखें और सुनिश्चित करें कि सब कुछ अच्छा लग रहा है।


0

इससे मुझे मदद मिली:

  1. मौजूदा एक के साथ एक नई शाखा बनाएं। चलो मौजूदा एक को कॉल करें branch_oldऔर जैसा नया branch_new

  2. branch_newस्थिर स्थिति में रीसेट करें , जब आपको कोई समस्या नहीं थी। उदाहरण के लिए, इसे अपने स्थानीय मास्टर के स्तर पर रखने के लिए निम्नलिखित कार्य करें:

    git रीसेट -हार्ड मास्टर git पुश -फोर्स मूल

  3. cherry-pickमें से आता branch_oldहैbranch_new

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