पुराने कमिट हटा दें


89

मैं बहुत नया हूँ, और सोच रहा था कि क्या ऐसा कुछ संभव है?

>git log --pretty=oneline --abbrev-commit
2f05aba Added new feature
3371cec Fixed screw up    <-- I want to remove this
daed25c Screw up          <-- and remove this.
e2b2a84 First.                So it's like they never happend.

क्या यह संभव है?

जवाबों:


63

इसके साथ संभव है git rebase। निम्नलिखित का प्रयास करें

git rebase -i HEAD~4

और फिर, अपने संपादक में इंटरैक्टिव निर्देशों का पालन करें। पहले चरण में आप कमिट "स्क्वैश" करते हैं। यह कुछ इस तरह दिखना चाहिए:

pick 2f05aba ... will be preserved
squash 3371cec ... will be squashed with daed25c
squash daed25c ... will be squashed with e2b2a84
pick e2b2a84 .. will contain this and 3371cec and daed25c

दूसरे चरण में आप प्रतिबद्ध संदेशों को संपादित कर सकते हैं।


27
क्या उन्हें हटाने के बजाय कमिट्स को हटाने के बारे में सवाल नहीं है?
रिचर्ड

4
@ स्टोनी: ठीक है, आप शायद उन्हें हटा भी सकते हैं। लेकिन ओपी ("स्क्रू अप" और "फिक्स्ड स्क्रू अप") में प्रतिबद्ध टिप्पणियों से मैंने मान लिया कि एक दूसरे को पूर्ववत कर रहा है और आप दोनों को स्क्वैश कर सकते हैं।
देवे

85

यदि आप वास्तव में उन्हें हटाने की इच्छा रखते हैं (उन्हें इतिहास से मिटा देना, कभी नहीं देखा जाना चाहिए), तो आप कर सकते हैं

रन रिबास:

git rebase -i HEAD~4

और फिर, केवल हटाने (या टिप्पणी) करने के लिए इसी तरह की लाइनें, जिसे आप हटाना चाहते हैं, जैसे:

pick 2f05aba ... #will be preserved
#pick 3371cec ... #will be deleted
#pick daed25c ... #will be deleted
pick e2b2a84 ... #will be preserved

2
मैं गितुब के लिए नया हूं, आप उसके बाद हुए बदलावों को कैसे आगे बढ़ाएंगे (जब मैं सिंक पर क्लिक करता हूं, तो यह सिर्फ वही करता है जो मैंने किया था)। मुझे लगता है कि मुझे यह मिल गया: git push origin HEAD --force
निकोलस थ्री

@NicolasThery आप नहीं। यही कारण है कि git पुश बिना --force के काम करने से मना कर देता है, क्योंकि आप इतिहास को फिर से लिख रहे हैं और आप अन्य लोगों के रिपॉजिटरी तोड़ देंगे। यदि आप पहले से ही धक्का दे चुके हैं तो आपका एकमात्र विकल्प एक करना है git revert। जो, जब आप इसके बारे में सोचते हैं, तो यह समझदार है क्योंकि यदि आप किसी और के कोड को खींचते हैं तो आप नहीं चाहेंगे कि आप किसी तरह के इतिहास के बिना अपने पुराने कमिट्स को मिटा सकें?
गुस्सा दान

मुझे लगता है कि यह बस वर्तमान गिट रेपो में काम करता है और ऊपर / किसी अन्य गिट नोड को कुछ भी नहीं बदलता है?
अलेक्जेंडर मिल्स

2
@AlexanderMills जब तक आप इसे धक्का नहीं करते हैं, तब तक यह कुछ भी नहीं बदलता है (और यदि आप ऐसा करते हैं, तो आपको --force ध्वज को जोड़ना होगा जैसा कि एंग्री डैन ने कहा था)।
शतुर

dया dropइतिहास से कमिट्स निकालने की आज्ञा है।
गाड़ी

5

प्रतिबद्ध (ओं) को पूरी तरह से हटाने के लिए dropअब git इंटरैक्टिव विद्रोह के लिए एक नया विकल्प है । पहला रन:

git rebase -i HEAD~4

तब की जगह pickके साथ dropप्रतिबद्ध (रों) गिरा दिया जाना के लिए:

pick 2f05aba ... #will be preserved
drop 3371cec ... #will be dropped
drop daed25c ... #will be dropped
pick e2b2a84 ... #will be preserved

यह निम्नलिखित संस्करण के साथ मेरे लिए फेडोरा पर काम करता है:

$ git version
git version 2.21.0

2

स्क्वैश तब उपयोगी होता है जब आप एक ही हैश के तहत मर्ज किए गए कमिट की सूची बनाना चाहते हैं, लेकिन अगर आप तीन अलग-अलग कमिट लेना चाहते हैं और अंतिम आउटपुट है जो ऐसा लगता है कि यह एक ही कमिट था, तो मैं सलाह देता हूं fixup

git rebase -i HEAD~4

pick 2f05aba ... will be preserved
fixup 3371cec ... will be merged with daed25c
fixup daed25c ... will be merged with e2b2a84
pick e2b2a84 .. will include 3371cec and daed25c, but only the commit message of e2b2a84

आप इंटरेक्टिव रीबेस यूआई की कमांड सूची में अधिक जानकारी पा सकते हैं।

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