2011-01-31 18 views
427

रद्द करने के लिए कैसे मेरे मुद्दा मैं एक फ़ाइल जैसे बदल गया है है: README, एक नई लाइन 'यह मेरा परीक्षण लाइन के लिए' जोड़ा गया है और फाइल सेव, तो मैं निम्न कमांडएक स्थानीय Git प्रतिबद्ध

git status 

# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: README 
# 
no changes added to commit (use "git add" and/or "git commit -a") 


git add README 

git commit -a -m 'To add new line to readme' 
जारी

मैंने कोड को जिथब पर नहीं धक्का दिया, अब मैं इस प्रतिबद्धता को रद्द करना चाहता हूं।

इसके लिए मैं

git reset --hard HEAD~1 

इस्तेमाल किया लेकिन मैं नए जोड़े लाइन खो README फ़ाइल से 'मेरी परीक्षण लाइन के लिए इस'। ऐसा नहीं होना चाहिए। मुझे वहां होने वाली सामग्री की ज़रूरत है। क्या सामग्री को बनाए रखने और मेरी स्थानीय प्रतिबद्धता को रद्द करने का कोई तरीका है?

+1

ऐसा लगता है कि आप निश्चित रूप से 'गिट रिवर्ट' के लिए नहीं पूछ रहे हैं, जो वापस किए गए प्रतिबद्धता के विपरीत अंतर के साथ एक नई प्रतिबद्धता बनाता है। रीसेट करना बस अपनी वर्तमान शाखा को एक अलग प्रतिबद्धता के लिए इंगित करता है, इस मामले में, उस प्रतिबद्धता से पहले जिसे आप "भूलना" चाहते हैं। – Cascabel

+1

एनबी: उल्लेखनीय हो सकता है कि अगर आप संदेश को खाली छोड़ देते हैं तो 'गिट-प्रतिबद्ध' निरस्त हो सकता है, इसलिए यदि आपने वास्तव में ऐसी प्रतिबद्धता को सही नहीं किया है जो सहायक हो सकता है। – GKFX

उत्तर

817

बस --hard झंडा बिना git reset का उपयोग करें:

git reset HEAD~1 

पुनश्च: यूनिक्स आधारित सिस्टम पर आप HEAD^ जो HEAD~1 के बराबर है उपयोग कर सकते हैं। विंडोज HEAD^ पर काम नहीं करेगा क्योंकि ^ एक लाइन निरंतरता संकेत करता है। तो आपका कमांड प्रॉम्प्ट आपको केवल More? से पूछेगा।

+0

धन्यवाद दोस्त .. :) –

+8

वैसे, इसे '--mixed' [मैन्युअल में] कहा जाता है (http://www.kernel.org/pub/software/scm/git/docs/git-reset। एचटीएमएल # _description)। –

+5

गिट के नए संस्करण भी 'HE^^' के लिए शॉर्टेंड के रूप में '@ ^' को अनुमति देते हैं। – Koraktor

95

--soft--hard ध्वज के बजाय का उपयोग करें:

git reset --soft HEAD^ 
+11

क्या आप बीच के अंतर को समझा सकते हैं 2 झंडे? –

+1

यदि आप पैकेज प्रबंधक कंसोल खोलते हैं और इसे "गिट रीसेट - सॉफ्ट हेड ^" चलाते हैं, तो यह वही करता है जो आप चाहते हैं (और मुझे क्या चाहिए)। –

+22

@ जॉन गियोटा - 'गिट रीसेट - सॉफ्ट हेड ^' अंतिम स्थानीय (अप्रशिक्षित) प्रतिबद्धता को हटा देगा लेकिन ** परिवर्तनों को बनाए रखेगा ** आपने – fider

15

आप के बीच में हैं, तो एक प्रतिबद्ध है (यानी पहले से ही अपने संपादक में), आप इसे पहले # ऊपर सभी लाइनों को हटाने के द्वारा रद्द कर सकते हैं। वह प्रतिबद्धता को रोक देगा। ताकि प्रतिबद्ध रिक्त है

तो तुम सब लाइनों को हटा सकते हैं, तो फ़ाइल को सहेजने:

It should look like this.

फिर आप एक संदेश है कि Aborting commit due to empty commit message. कहते हैं मिलेगा।

+3

यह * बिल्कुल * है जो मैं ढूंढ रहा था! इस जवाब को और अधिक अपवित्र की जरूरत है :) – jdunk

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