2010-01-14 13 views
5

मैं एक भंडार पर काम कर रहा हूं जिसे मैंने फोर्क किया था जिसमें लेखक ने गंदे पथ को लिया और प्रारंभिक प्रतिबद्धता में lib/निर्देशिका में अपनी सभी निर्भरताओं को भर दिया। आम तौर पर, यदि यह प्रारंभिक प्रतिबद्धता नहीं थी, तो मैं केवल एक इंटरैक्टिव रिबेस करूँगा और पूरी प्रतिबद्धता को हटा दूंगा (यदि वह सब कुछ उसने किया है)। हालांकि, मुझे नहीं पता कि मैं प्रारंभिक प्रतिबद्धता को कैसे संपादित/हटाऊंगा। क्या कोई तरीका है कि मैं प्रारंभिक प्रतिबद्धता को संपादित कर सकता हूं और बाकी के स्पर्श किए बिना lib निर्देशिका को हटा सकता हूं? चयनित जवाब में Can I remove the initial commit from a Git repo?:मैं एक github भंडार में प्रारंभिक प्रतिबद्धता कैसे संपादित करूं?

संपादित

मैंने गलती से इस सवाल का जवाब यहाँ पर ठोकर खाई। मैं यही और अधिक अच्छी तरह से खोज नहीं करने के लिए मिलता है।

उत्तर

4
$ git filter-branch --parent-filter \ 
    'test $GIT_COMMIT = SECOND && echo "" || cat' \ 
    --tag-name-filter cat -- --all 

जहां दूसरा SHA-1 के लिए प्रतिबद्ध आप नया रूट होना चाहता हूँ की है।

उपरोक्त मानते हैं कि सभी शाखाएं पहले और दूसरी प्रतिबद्धताओं का उपयोग करती हैं। यदि नहीं, तो आपको पैरेंट फ़िल्टर में परीक्षण को सामान्यीकृत करने की आवश्यकता होगी।

ध्यान दें कि यह एक कठोर उपाय है: यह आपके पूरे इतिहास को फिर से लिख देगा और आपको लेखक के रेपो का पालन करने से रोक देगा। इसके अलावा यदि आपने अपने रेपो को रिमोट पर धक्का दिया है, तो आपको git push -f वाले लोगों को पकड़ना होगा।

+0

चेतावनी: रेफरी 'refs/सिर/मास्टर' अपरिवर्तित है चेतावनी: रेफरी 'refs/रिमोट/मूल/मास्टर' अपरिवर्तित है चेतावनी: रेफरी 'refs/रिमोट/मूल/मास्टर' अपरिवर्तित है यह क्या दे दिया है मुझे। – Rayne

+0

एएके! आप * दूसरे * प्रतिबद्धता के माता-पिता को फिर से लिखना चाहते हैं, पहले नहीं। अद्यतन उत्तर देखें, और झूठी शुरुआत के लिए खेद है। –

+0

मैंने इस पोस्ट को संपादित करने से पहले इसे करने के लिए एक अलग तरीका निकाला (मेरे संपादन में दिखाया गया)। मैं इस धारणा के साथ जाने जा रहा हूं कि यह वास्तव में काम करता है (मैं पूरी तरह से आप पर भरोसा करता हूं <3) और अपना जवाब किसी भी तरह स्वीकृत के रूप में चिह्नित करता हूं। – Rayne

संबंधित मुद्दे