2010-12-21 10 views
15

मैं एक फ़ाइल संपादित और आपने क्या किया:मैं अपने आखिरी गिट एड/प्रतिबद्ध कैसे पूर्ववत कर सकता हूं?

git add file.py 
git commit -m 'fixed bug' 

मैं फिर एक और फ़ाइल संपादित और एक मामूली बग फिक्स प्रदर्शन किया। मैं नहीं चाहता कि दो काम करता है, एक दूसरे के बाद, 'बग फिक्स' दिखा रहा है। मैं चाहता हूं कि एक 'बग फिक्स' के साथ प्रतिबद्ध हो।

मैं अंतिम जोड़/प्रतिबद्धता को पूर्ववत कैसे कर सकता हूं और पहला प्रतिबद्ध संदेश बदल सकता हूं?

मैं git reset, git revert, git undo आदेशों देख रहा था, लेकिन मैं

संपादित एक अनुमान के साथ मेरी रेपो अप पेंच नहीं करना चाहता: पता चला यह कैसे करना है: http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

उत्तर

26

आप यदि पहले से ही अपने दूसरे परिवर्तन के लिए प्रतिबद्ध है, यह पहले रीसेट:

git reset HEAD^ 

अब आप अपने HEAD पहले प्रतिबद्ध है, और अपने स्थानीय फ़ाइलों की सामग्री अपरिवर्तित है।

git add <the file(s) for the second bug fix> 
git commit --amend -m'bug fixes' 

यदि सब पर नज़र रखी और बदल फ़ाइल दूसरा बग समाधान के लिए शामिल होने के लिए कर रहे हैं, तो आप इस चला सकते हैं बजाय, हमेशा की तरह:

    :

    git commit -a --amend 
    

    में संशोधन के लिए प्रतिबद्ध वास्तव में यह है

  • पिछले प्रतिबद्धता में सूचकांक में परिवर्तन जोड़ता है (इसलिए git add, या -a की आवश्यकता)
  • आपको सी अपने प्रतिबद्ध संदेश को हंग करें

सावधान रहें, यद्यपि: यदि आपने पहली प्रतिबद्धता वितरित की है, तो अन्य लोगों का रेपो अजीब हो जाएगा। आपको किसी प्रतिबद्धता को नहीं बदलना चाहिए जिसे किसी और ने लाया है।


तुम भी शायद git merge --squash इस्तेमाल कर सकते हैं, जो और अधिक तार्किक लेकिन जरूरी नहीं कि आसान लगता है। पिछली प्रतिबद्धता में, अपनी दो प्रतिबद्धताओं वाली शाखा को मर्ज करने के लिए इसका उपयोग करें।

स्क्वैशिंग git rebase के साथ काम करता है।

+0

दो फाइलों के साथ मैंने संपादित किया, मैंने पहले से ही 'गिट ऐड फाइल' की है; गिट प्रतिबद्ध '। 'Git --amend -m' asd'' करना सिर्फ मेरे पिछले प्रतिबद्ध संदेश को संपादित करेगा, है ना? लॉग में पहली प्रतिबद्धता छोड़ना? – dave

+0

नहीं, '--amend' इंडेक्स की सामग्री को नव निर्मित प्रतिबद्धता में जोड़ता है। पुरानी प्रतिबद्धता गायब हो जाती है (लटकती हो जाती है)। संभावना है कि आप इसे अभी भी गिटक में देख सकते हैं, इसे गायब करने के लिए गिट में एक रीलोड (Ctrl + F5) चलाएं। लटकती हुई प्रतिबद्धता बाद में स्मृति से गायब हो जाएगी ('गिट जीसी' इसे साफ करना चाहिए)। – Gauthier

+0

क्या आपने पहले से ही दो बार किया है? उस स्थिति में आप उपरोक्त आदेशों को 'गीट रीसेट HEAD ^' के साथ पूर्ववत कर सकते हैं। यह सब करने से पहले कृपया अपने रेपो का बैकअप लें (सुनिश्चित करें कि फ़ोल्डर .git आपके बैकअप में है), मैं डेटा हानि के लिए ज़िम्मेदार नहीं बनना चाहता हूं। – Gauthier

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

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