मैं अपने गितुब कांटे को कैसे साफ कर सकता हूं ताकि मैं साफ पुल अनुरोध कर सकूं?


83

मैंने गितुब पर एक रिपॉजिटरी लिखी। मैंने कुछ छोटे बदलाव किए हैं और अपस्ट्रीम के लिए पुल अनुरोध प्रस्तुत किए हैं, लेकिन जिस तरह से मेरा कांटा इतना जर्जर हो गया है कि मैं स्वच्छ पुल अनुरोध उत्पन्न करने में असमर्थ हूं; जब मैं छह बदलावों के साथ एक शाखा से एक पुल अनुरोध शुरू करता हूं, तो गितुब तेरह प्रस्तुत करना चाहता है, जिनमें से सात पहले से ही अपस्ट्रीम (natch) मौजूद हैं।

मेरी समस्या केवल नवीनतम कमिटों को खींचने से संबंधित प्रतीत होती है , लेकिन जब मैं एक नई शाखा बनाता हूं और चेरी-पिक कमिट करता हूं, तब भी मेरे पास एक्स्ट्रा होते हैं। मैं के साथ futzed गए रिबेसिंग रूप में अच्छी तरह है, लेकिन अब ऐसा लगता है कि यहां तक कि लग रहा है मेरे मालिक तो में गड़बड़ है मैं एक स्वच्छ प्रतिलिपि उत्पन्न नहीं कर सकते नदी के ऊपर । यह स्पष्ट रूप से है क्योंकि मुझे समझ में नहीं आया कि मुझे विलय के बजाय फिर से बनाने की ज़रूरत है , इसलिए स्पष्ट रूप से मैंने गलतियाँ की हैं; मैं जो करने की कोशिश कर रहा हूं वह यह है कि उस गाँठ को कैसे अनसुना किया जाए और एक साफ स्थिति में वापस लाया जाए जहां मैं उपयोगी तरीके से आगे बढ़ सकता हूं।

मैं अपने कांटे को उड़ाने और ऊपर की तरफ एक नया कांटा बनाना चाहता हूं, लेकिन मैं इकट्ठा करता हूं, वह भी मुश्किल है।

मेरे गिट पापों को कबूल करने के बाद, मैं गितुब अनुपस्थिति कैसे प्राप्त करूं?


1
अनुपस्थित रहने के लिए अपने कबूलनामे और अनुरोध को प्यार करें :-)
जॉन केर्न

क्या, ऐसे लोग हैं जिनके लिए कोई धर्म नहीं है? ;-)
pjmorse

जवाबों:


102

चरण 1: अपस्ट्रीम परिवर्तनों को खींचो
इसे अपस्ट्रीम रेपो को "अपस्ट्रीम" के रूप में जोड़ने की सिफारिश की जाती है जैसा कि फोर्क और रेपो पर समझाया गया है :

git pull --rebase upstream master

--rebaseनवीनतम के मर्ज के बिना प्रतिबद्ध विकल्प शीर्ष पर अपने परिवर्तनों को देता है।

चरण 2: (वैकल्पिक) अपने कमिट्स को 1 कमिट में मर्ज करें

git reset --soft upstream/master

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

git commit -a

चरण 3: अपने परिवर्तनों की जांच और परीक्षण करें

दिखाने के लिए परिवर्तन में निर्मित की तरह एक जीयूआई का उपयोग gitk, Sourcetree , TortoiseGit या टॉवर (सशुल्क) , आदि।

चरण 4: धक्का

git pushएक त्रुटि फेंक देगा, क्योंकि धक्का लक्ष्य भंडार के इतिहास को बदल देगा।
यदि आप आश्वस्त हैं कि चरण 3 में दिखाए गए परिवर्तन सही हैं तो "-f" के साथ धक्का दें

git push -f origin master


अतिरिक्त जानकारी
रिमोट जोड़ने का कमांड है:

git remote add upstream git://github.com/[username]/[project].git

आप डायरेक्ट URL से भी खींच सकते हैं:

git pull --rebase  git://github.com/[username]/[project].git

लेकिन फिर आपको अन्य चरणों में "अपस्ट्रीम / मास्टर" के बजाय नवीनतम अपस्ट्रीम कमिट के हैश की आवश्यकता होगी।


3
आपका बहुत बहुत धन्यवाद। GitHub को अपने Fork A Repo को अपडेट करना चाहिए ।
बुचचोन्स

धन्यवाद! मैंने इस समस्या को हल करने के कई तरीके आजमाए, कुछ भी काम नहीं आया। इस उत्तर को खोजने से पहले मेरे कांटे को उड़ाने के लिए तैयार था ... और यह काम किया। धन्यवाद!
यहूदा गैब्रियल हिमंगो

हाय, @ जुदाहिमंगो। क्या आपने "चरण 2" का भी अनुसरण किया है। क्योंकि मैं भी आप जैसी ही स्थिति में हूं। क्या आप मेरी मदद कर सकते हैं।
arunit21

यह एक उत्कृष्ट संसाधन है। धन्यवाद!
डॉ। जन-फिलिप गेर्के

मेरे कांटेक्ट रेपो ने कहा कि यह अपस्ट्रीम के साथ सिंक से बाहर है, इसलिए मैं नीचे खींचूंगा और मर्ज करूंगा - जो मेरे कांटे पर कमिट करता है जो जरूरी नहीं थे। इस दृष्टिकोण का उपयोग करते हुए और धक्का को मजबूर करने से यह हल हो गया है। मैंने अपने पहले के कुछ कॉम्बीनेशन को संयोजित करने के लिए रिबास का इस्तेमाल किया: git rebase -i HEAD ~ n [जहां n कमिट्स की संख्या है]
कोडर

4

जैसा कि मैं इसे समझता हूं, दोनों Git और Mercurial के साथ (मैंने केवल बाद का उपयोग किया है, इसलिए मैं गलत हो सकता हूं) यह एक कांटा उड़ाने और इसे फिर से कांटा करने के लिए बिल्कुल भी बड़ी बात नहीं है। मैं अपनी परियोजनाओं के साथ हर समय ऐसा करता हूं। यदि आप ऐसा करने के साथ ठीक हैं (अपने परिवर्तनों का बैकअप ले सकते हैं, या आपके कांटे में कोई महत्वपूर्ण परिवर्तन नहीं हैं), तो मैं कहूंगा कि शायद यही रास्ता है।

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


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

1
ओह समझा। मैं मुख्य रूप से BitBucket का उपयोग करता हूं, और जब आप व्यक्तिगत कार्य प्रतियों के साथ काम कर रहे होते हैं तो "कांटा" का पर्याय "फोर्क" होता है। मैं अपने जवाब को यहाँ वैसे भी छोड़ दूँगा, हालाँकि सिर्फ मामले में।
सीन एडवर्ड्स

हाँ, मैंने अपना स्थानीय क्लोन हटा दिया है और कई बार पहले ही क्लोन कर चुका हूँ। मैंने एक और रेपो के साथ एक प्रयोग किया और ऐसा लगता है कि कांटे को हटाने और उसी स्रोत से नया बनाने में कोई समस्या नहीं है।
pjmorse

एनबी मैं git format-patchउन कमिट्स को संरक्षित करने के लिए उपयोग कर रहा हूं जो मैं पहले बचाना चाहता हूं।
pjmorse

1
आपके फ़ॉर्क्ड रिपॉजिटरी को हटाना और रीफ़र्क करना अनावश्यक है, और git format-patchअपने काम को बचाने के लिए उपयोग करना उन सभी सहायक उपकरणों को साइड- स्टेप करने का है जो कि शाखाओं के प्रबंधन के लिए है। भविष्य में, git rebase -iनई अपस्ट्रीम masterशाखा के शीर्ष पर अपने कमिट को फिर से लिखने के लिए उपयोग करना सही काम है।
मार्क लोंगेयर

0

अपने निजी रेपो पर, फोर्कियो के रेपो को रिमोट के रूप में जोड़ें। रिमोट की शाखाओं से अपनी शाखाओं को रिबेस / रिसेट करें। अपने गिथब रेपो के लिए एक बल पुश करें।

यदि आपको सटीक आदेशों की आवश्यकता है, तो मुझे बताएं। मुझे यह भी बताएं कि क्या आप स्थानीय कमिट्स को आज़माना चाहते हैं या "उड़ाना" ठीक है या नहीं।

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