अब तक के सभी जवाबों के पीछे चिंता की बात नहीं है:
क्या एक कुशल विधि है जब हटाए जाने के बाद सैकड़ों संशोधन होते हैं?
चरणों का पालन करें, लेकिन संदर्भ के लिए, आइए निम्नलिखित इतिहास को मानें:
[master] -> [hundreds-of-commits-including-merges] -> [C] -> [R] -> [B]
सी : हटाने के लिए प्रतिबद्ध होने के बाद ही प्रतिबद्ध (साफ)
R : हटाने के लिए प्रतिबद्ध है
बी : हटाने के लिए प्रतिबद्ध होने से पहले प्रतिबद्ध (आधार)
"सैकड़ों संशोधन" की कमी के कारण, मैं निम्नलिखित पूर्व शर्तें मान रहा हूं:
- वहाँ कुछ शर्मनाक है कि आप चाहते हैं कि कभी अस्तित्व में नहीं था
- ZERO बाद में आने वाले कमिट हैं जो वास्तव में उस शर्मनाक कमिट पर निर्भर करते हैं (रिवर्ट पर शून्य संघर्ष)
- आप इस बात की परवाह नहीं करते हैं कि आपको सैकड़ों हस्तक्षेप करने वाले कमिटों के 'कमेटी' के रूप में सूचीबद्ध किया जाएगा ('लेखक' संरक्षित रहेगा)
- आपने रिपॉजिटरी को कभी साझा नहीं किया है
- या आप वास्तव में उन सभी लोगों पर पर्याप्त प्रभाव डालते हैं, जिन्होंने कभी अपने इतिहास को अपने नए इतिहास का उपयोग करने के लिए मनाने के लिए इसमें प्रतिबद्ध किया है
- और आप परवाह नहीं है के बारे में इतिहास को फिर से लिखने
यह बाधाओं का एक सुंदर प्रतिबंधक सेट है, लेकिन एक दिलचस्प जवाब है जो वास्तव में इस कोने के मामले में काम करता है।
यहाँ कदम हैं:
git branch base B
git branch remove-me R
git branch save
git rebase --preserve-merges --onto base remove-me
अगर वास्तव में कोई टकराव नहीं हैं, तो इसे बिना किसी रुकावट के आगे बढ़ना चाहिए। यदि संघर्ष होते हैं, तो आप उन्हें हल कर सकते हैं rebase --continueया शर्मिंदगी के साथ जीने का फैसला कर सकते हैं और rebase --abort।
अब आपको इस पर होना चाहिए masterकि अब इसमें कोई आर नहीं है। जिस saveस्थिति में आप सामंजस्य बनाना चाहते हैं, उसके लिए शाखा आपको बताती है।
आप अपने नए इतिहास में अन्य सभी के स्थानांतरण की व्यवस्था कैसे करना चाहते हैं, यह आप पर निर्भर है। आप से परिचित होने की आवश्यकता होगी stash, reset --hardऔर cherry-pick। और अगर आप नष्ट कर सकते हैं base, remove-meऔर saveशाखाओं