git: टाइपिंग संदेश के बीच में गर्भपात


131

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

जवाबों:


85

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

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

वैकल्पिक रूप से, वायम के बफ़र्स में से एक मेसेज को कॉपी करें।

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


7
नोट: "": q! यदि ऑटोपोप्रिक्टेड मर्ज संघर्ष संदेश है, तो कमिट को निरस्त नहीं कर सकते। इसके बजाय कमिट जारी रहेगी और मैसेज लिस्ट नहीं करेगा कि किन फाइलों में टकराव हुआ था।
स्टीफनबेस्ज

write the empty file (an empty commit message will abort the commit)भाग एक आकर्षण की तरह काम किया, धन्यवाद!
Саша Давиденко

182

यदि आपका संपादक एक त्रुटि कोड के साथ बाहर निकल सकता है - तो कमिट गर्भपात करेगा। VIM का उपयोग करते समय, टाइप करें

:cq

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


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

2
अच्छी चाल! हालांकि सवाल यह था कि कमिट मैसेज को कैसे बचाया जाए, इसे डिलीट न करें।
एलिजा लिन

तो svn ऐसा करने का प्रबंधन कैसे करता है? यह बाहर निकलने के कोड के अलावा क्या दिखता है?
चैम गेरेट्ज़

1
जब आप एक इंटरैक्टिव रिबेस उर्फ
स्क्वाशिंग

जब मैंने रिबेस git commit --amendके git rebase --continueदौरान किया तो मैंने अपनी जान बचाई ।
वीशी ज़ेंग

68

यदि आपने अपना प्रतिबद्ध संदेश लिखने के लिए खोल दिया है तो बस उन पंक्तियों को हटा दें जो # के साथ शुरू नहीं होती हैं और आपके कमिट को रद्द कर देंगी

Aborting commit due to empty commit message.

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

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

2
ggdGसंदेश की सभी सामग्री को काट देगा, फिर अगली बार जब आप दौड़ेंगे vimतो आप केवल Pवह पाठ कर सकते हैं जिसे आपने पहले काटा था।
oromoiluig

नैनो, ctrl + k सभी लाइनों का उपयोग करके काम करता है तब सेव और
एग्जॉस्ट

9

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


7

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

इसलिए यदि आप VI / VIM का उपयोग कर रहे हैं, तो आप निम्नलिखित कार्य करना चाहते हैं ...

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

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


यह काम करता है, लेकिन कम बेहतर है क्योंकि 1) यह मानता है कि मैं CWD है जहाँ .it फ़ोल्डर 2 है) मैं गिट वर्कट्रीज़ का उपयोग करता हूं , और गिट वर्कट्रीज़ के साथ, .It वास्तव में एक फ़ाइल कह रहा है जहाँ वास्तविक .गित फ़ोल्डर है।
अलेक्जेंडर बर्ड

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

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

1
@AlexanderBird उसके बाद :wकरो :sav committmpऔरgit commit -eF committmp
Hashbrown

0

मैं आमतौर पर IntelliJप्रदान किए गए टर्मिनलों का उपयोग करके अपना कमिट करता हूं । दुर्भाग्य से मेरे काम मैनुअल हैं:

git commit -m'my message' // etc

तो केवल एक चीज जो मुझे लगता है कि करने के लिए सुरक्षित है बस टर्मिनल विंडो बंद है! बस अपने पाठ को हाइलाइट करें यदि आप इसे सहेजना चाहते हैं, तो कॉपी करें, फिर टर्मिनल विंडो बंद करें।


-2

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

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

git add files
git commit --amend

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

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

Aborting commit due to empty commit message.

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


अगर मैं समझता हूं कि आप जो कह रहे हैं वह एक समस्या है, तो आप गलत हैं; के रूप में यहां प्रदर्शन किया: git commit; vim ....; git commit --amend; git reset HEAD@{1}। वह है: यदि मैं संशोधन को "पूर्ववत" करना चाहता हूं, तो मुझे पिछली प्रतिबद्धताओं को विभाजित करने की आवश्यकता नहीं है। प्रतिबद्ध वस्तु जो संशोधन से पहले HEAD थी उसे बचाया गया है HEAD@{1}। इसके अलावा, ज़ेटा ने पहले ही सभी गैर-टिप्पणी लाइनों को हटाने का सुझाव दिया है।
अलेक्जेंडर बर्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.