2012-02-05 9 views
83

मैं काम करने के बीच में हूं। मैंने विम में अपना प्रतिबद्ध संदेश टाइप किया है। अब मुझे याद आया कि मुझे कुछ बदलने की जरूरत है। मुझे एहसास है कि जो कुछ मैं चाहता हूं उसे पूरा करने के लिए अन्य विकल्प हैं, लेकिन मैं जानना चाहता हूं कि प्रतिबद्धता को रद्द करने का कोई तरीका है या नहीं, लेकिन अब तक मैंने जो प्रतिबद्ध संदेश लिखा है उसे बचाएं।गिट: टाइपिंग संदेश के बीच में प्रतिबद्ध करें

उत्तर

67

हां। एक अलग फ़ाइल() पर प्रतिबद्ध संदेश लिखें। फिर सहेजे बिना संपादक से बाहर निकलें (:q!)। यदि आपने पहले फ़ाइल को अपने मूल पथ में सहेजा था, तो सबकुछ हटाएं और पहले खाली फ़ाइल लिखें (एक खाली प्रतिबद्ध संदेश प्रतिबद्धता को रोक देगा)।

अब, जब आप "असली के लिए" प्रतिबद्ध करने के लिए तैयार हैं, तो वैकल्पिक पथ पर सहेजी गई संदेश फ़ाइल का उपयोग करें।

वैकल्पिक रूप से, प्रतिबद्ध संदेश को विम के बफर में से एक में कॉपी करें।

यह ध्यान देने योग्य आप वास्तव में सभी पर ऐसा करने की जरूरत नहीं है कि लायक है: commit --amend आप प्रतिबद्ध के बाद इसे बनाया है, इसलिए आसान उपाय है कि तुम क्या मिल गया है के साथ प्रतिबद्ध हैं और फिर ठीक का उत्पादन होता है को बदलने की सुविधा देता है इसे धक्का देने से पहले। आप अपने टूटी हुई स्थिति में भी प्रतिबद्धता को पूरा कर सकते हैं, reset HEAD~ (आपको राज्य में रीसेट कर देता है कि आपकी कार्यशील प्रति प्रतिबद्धता से पहले थी), पुरानी प्रतिबद्ध संदेश का उपयोग करने के लिए अपनी कार्यशील प्रतिलिपि ठीक करें, और फिर commit -a -c [email protected]{1} को ठीक करें।

+1

नोट: "q!" का उपयोग करके विम छोड़ना यदि एक ऑटोपॉप्लेटेड विलय संघर्ष संदेश है तो प्रतिबद्धता को निरस्त नहीं करेगा। इसके बजाए प्रतिबद्धता जारी रहेगी और संदेश सूचीबद्ध नहीं होगा कि कौन सी फाइलों के विवाद हुए थे। – stephenbez

+1

काम नहीं किया ... :(यह अभी भी प्रतिबद्धता पूरी कर चुका है। – phyatt

9

जबकि आप प्रतिबद्धता को रोक सकते हैं, तो दूसरा दृष्टिकोण में बाद में प्रतिबद्ध है। बस अपना वर्तमान काम करें, फिर आप जो भी अतिरिक्त परिवर्तन चाहते हैं, git add उन्हें चलाएं, फिर git commit --amend चलाएं। आपको प्रतिबद्ध संदेश संपादक में वापस रखा जाएगा, और जब आप सहेजेंगे, तो अतिरिक्त परिवर्तन और आपका नया प्रतिबद्ध संदेश शामिल करने के लिए प्रतिबद्धता में संशोधन किया जाएगा।

54

अपने प्रतिबद्ध

Aborting commit due to empty commit message. 
+9

यह विशेष रूप से उपयोगी होता है जब आप एक गिट प्रतिबद्ध - abend को रोकना चाहते हैं। – edsko

+0

यह नैनो संपादक –

+1

के साथ काम नहीं करता है सवाल यह था कि कैसे रद्द करना है प्रतिबद्ध करें लेकिन प्रतिबद्ध संदेश को सहेजें। # से शुरू होने वाली लाइनों को हटाने से प्रभावी संदेश को हटा दिया जाता है, प्रतिबद्ध संदेश सहेजता नहीं है। सुनिश्चित नहीं है कि इसमें कितने अपवर्त हैं। –

111

आप vim अपने संदेश के लिए प्रतिबद्ध बस लाइनों के साथ # और Git शुरू नहीं करना रद्द कर देगा हटाना लिखने के लिए खोला गया है, तो अपने संपादक एक त्रुटि कोड के साथ बाहर निकलने कर सकते हैं - - गिट प्रतिबद्धता को रोक देगा। वीआईएम का उपयोग करते समय,

:cq 

गैर-शून्य त्रुटि कोड से बाहर निकलने और प्रतिबद्धता को निरस्त करने के लिए टाइप करें।

+0

यह एक प्रतिबद्धता को रद्द करने के लिए एक अच्छी चाल है - संशोधित करें क्योंकि आपको अन्यथा मौजूदा प्रतिबद्ध संदेश और ': wq' को हटाना होगा। –

+1

अच्छी चाल! हालांकि सवाल यह था कि प्रतिबद्ध संदेश को कैसे सहेजना है, इसे हटाएं। –

+0

तो svn यह कैसे प्रबंधित करता है? क्या करता है यह एक्जिट कोड के अलावा देखता है? –

-1

@bdonlan उत्तर इस सवाल के लिए अच्छा है, लेकिन मैं एक ऐसी स्थिति को इंगित करूंगा जहां आप बेहतर समाधान चाहते हैं।

कहें कि आप अंतिम प्रतिबद्धता में परिवर्तन जोड़ना चाहते हैं। तो अगर आप कर के रूप में @bdolan सुझाव:

git add files 
git commit --amend 

कल्पना कीजिए कि नया संदेश, आपको लगता है कि प्रतिबद्ध करने के लिए उन फ़ाइलों को जोड़ने अफसोस लेखन के दौरान। समस्या है जो आप से पहले ही सहेजे गए हैं संदेश भेजते हैं और संपादक से बाहर निकलते हैं (बचत के साथ या बिना) अंतिम बदलाव में उन परिवर्तनों को जोड़ देंगे। इन कार्रवाइयों से पहले आप जिस बिंदु पर थे, उस पर वापस लौटने के लिए आपको split the last commit की आवश्यकता है - मैं शर्त लगाता हूं कि आप इससे बचना चाहते हैं।

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

Aborting commit due to empty commit message. 

और आपने आखिरी प्रतिबद्धता बिल्कुल नहीं बदला है।

+0

करता है अगर मैं समझता हूं कि आप क्या समझते हैं कह रहा है एक समस्या है, तो आप गलत हैं; जैसा कि यहां प्रदर्शित किया गया है: 'गिट प्रतिबद्ध; विम ....; गिट प्रतिबद्ध - प्रस्तुत करें; गिट रीसेट HEAD @ {1} '। यही है: अगर मैं संशोधन को पूर्ववत करना चाहता हूं, तो मुझे पिछले प्रतिबद्धता को विभाजित करने के लिए _not_ को नहीं करना है। प्रतिबद्ध वस्तु जो संशोधित करने से पहले सिर थी, उसे 'HEAD @ {1} 'के रूप में सहेजा गया है। इसके अलावा, ज़ेटा ने पहले से ही सभी गैर टिप्पणी लाइनों को हटाने का सुझाव दिया है। –

4

हाँ यह संभव है। प्रतिबद्ध करने के लिए, आपके संपादक को .git/COMMIT_EDITMSG फ़ाइल को प्रतिबद्ध संदेश लिखना होगा और 0 स्थिति कोड से बाहर निकलना होगा।

तो तुम छठी/विम का उपयोग कर रहे हैं, तो आप निम्न कार्य करने की अपनी प्रतिबद्धता संदेश लिखने के लिए कर सकते हैं ...

  1. सहेजें :w साथ संदेश के लिए प्रतिबद्ध एक त्रुटि :cq
  2. साथ संपादक
  3. से बाहर निकलें (डिफ़ॉल्ट रूप से इस .git/COMMIT_EDITMSG करने के लिए वर्तमान सामग्री की बचत होगी) ... आपको क्या करना है क्या करना है ... यहां तक ​​कि जोड़ें/निकालें क्षेत्र स्टेज करने के लिए फाइलें।
  4. git commit -eF .git/COMMIT_MESSAGE

-F /path/to/file के साथ अपने मौजूदा प्रतिबद्ध संदेश को संपादित करने से/पथ किसी भी सामग्री के साथ संपादक से स्थापित हो जाएगा// फाइल करने के लिए जारी रखें। हालांकि, डिफ़ॉल्ट रूप से यह तुरंत प्रतिबद्धता निष्पादित करेगा, जब तक कि आप संपादन संपादन के लिए -e ध्वज प्रदान करते हैं।

+0

यह काम करता है, लेकिन कम बेहतर है क्योंकि 1) यह मानता है कि मैं सीडब्ल्यूडी है जहां .git फ़ोल्डर 2 है) मैं [git worktrees] (https://git-scm.com/docs/git-worktree) का उपयोग करता हूं, और गिट वर्कट्रीज़ के साथ, .git वास्तव में एक _file_ कह रहा है जहां वास्तविक .git फ़ोल्डर है। –

+0

@AlexanderBird यह सच नहीं है ... जब आप चरण 5 में पुराना प्रतिबद्ध संदेश चुनना चाहते हैं), तो आपको केवल एक सापेक्ष पथ निर्दिष्ट करना होगा (कहें कि आप '/ foo/bar /' निर्देशिका में हैं , प्रोजेक्ट रूट से संबंधित) जैसे 'git प्रतिबद्ध -eF ../../। git/COMMIT_MESSAGE' –

+0

@AlexanderBird cool, अभी तक गिट में कई काम करने वाले पेड़ों की सुविधा के साथ ध्यान नहीं दिया है। संकेत के लिए Thx! मेरा मानना ​​है कि इस पर एकमात्र नकारात्मक पक्ष है, आपको अपने सिर में एक सामान्य अवलोकन रखना होगा, जो आपको वास्तविक कोड पर ध्यान केंद्रित करने से रोकता है। और सिर्फ "जहां मैंने छोड़ा है" पर प्रतिबद्ध संदेश चुनने के लिए यह थोड़ा भारी है :) –

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