2012-01-20 15 views
52

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

मेरा सवाल यह है कि, मैं अवांछित प्रतिबद्धताओं को कैसे हटा सकता हूं और उन परिवर्तनों को कैसे कर सकता हूं जिन्हें मैं प्रतिबद्ध करना चाहता हूं ताकि मैं मास्टर के साथ अद्यतित हूं?

+0

"गिट रिबेस" देखें। आप स्क्वैश एक साथ काम कर सकते हैं, और कुछ बाहर निकलते हैं। –

उत्तर

34

मुझे लगता है कि आपकी उत्पत्ति कुछ परियोजनाओं का अपना कांटा है जिसे आप पुल अनुरोध भी करना चाहते हैं?

चूंकि आप इतिहास बदल रहे हैं (सिर को रीसेट करके) आपको --force ध्वज के साथ धक्का देना होगा। git log का उपयोग करके अपने अंतिम अच्छे प्रतिबद्धता के हैश का पता लगाएं।

अब

git reset SHA 

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

अब आप अपना कोड बदल सकते हैं और जो काम आप चाहते हैं उसे कर सकते हैं। लेकिन आपको git push --force करना है क्योंकि आपने रिपोजिटरी का इतिहास बदल दिया है। इसका मतलब है कि जो कोई भी आपकी रिपॉजिटरी फोर्क करता है वह अब आपसे बदलाव नहीं कर पाएगा। लेकिन आप अपने अपस्ट्रीम के लिए एक पुल अनुरोध करने में सक्षम होंगे।

+0

क्या बल केवल एक समस्या को धक्का दे रहा है अगर कोई शाखा खींचता है तो मेरा पुल अनुरोध चालू था? या अगर वे मेरे भंडार से बिल्कुल कोई कांटा करते हैं? अगर वे अपमानजनक शाखा को हटा देते हैं तो क्या वे फिर से मेरे भंडार के साथ सिंक हो सकते हैं? बल खींचने के बिना स्पष्ट रूप से एक पुल अनुरोध से काम को हटाने का कोई तरीका है? – endolith

+1

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

+0

शाखा के परिवर्तन को प्रभावी बनाने के लिए पुल अनुरोध खुला होना चाहिए –

0

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