मैं बहुत पहले git कमिट मैसेज को कैसे reword करता हूँ?


116

मेरे पास एक काम करने वाला पेड़ है जिसमें 3 कमिट हैं:

➜ ~ मायप्रोजेक्ट गिट: (मास्टर) git log

commit a99cce8240495de29254b5df8745e41815db5a75
Author: My Name <my@mail.com>
Date:   Thu Aug 16 00:59:05 2012 +0200

    .gitignore edits

commit 5bccda674c7ca51e849741290530a0d48efd69e8
Author: My Name <my@mail.com>
Date:   Mon Aug 13 01:36:39 2012 +0200

    Create .gitignore file

commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3
Author: My Name <my@mail.com>
Date:   Mon Aug 13 01:13:05 2012 +0200

    Initial commit (with a misleading message)

अब मैं rewordअपने पहले कमिट (6707a66) के प्रतिबद्ध संदेश की कामना करता हूं

➜ ~ मायप्रोजेक्ट गिट: (मास्टर) git rebase -i 6707

(... प्रवेश कर रहा है)

pick 5bccda6 Create .gitignore file
pick a99cce8 .gitignore edits

# Rebase 6707a66..a99cce8 onto 6707a66
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

इस मामले में, मैं rewordप्रश्न में प्रतिबद्ध संदेश को सही ( git parlance में) करना चाहता हूं :

प्रारंभिक वचन (भ्रामक संदेश के साथ)

… कुछ उपयुक्त के लिए।

हैरानी की बात यह है कि ऊपर दिया गया मेरा प्रयास सफल नहीं हुआ, क्योंकि स्पष्ट रूप से पहले से कोई माता-पिता प्रतिबद्ध नहीं है । (और जब आप rebase, आपको अपनी इच्छा से पहले अगले सबसे पुराने प्रतिबद्ध का संदर्भ देने की आवश्यकता है reword, है ना?)

मेरे प्रश्न का सार, इस प्रकार, क्या आप इसे करने के किसी अन्य माध्यम से इसे प्राप्त कर सकते हैं?


या आप इसे केवल एक रिपॉजिटरी टैड्री क्विक के
क्रिस्टोफर


^ बहुत सही ... मुझे लगा कि मैंने इस विशेष प्रश्न के लिए ठीक से खोज की है, लेकिन यह मेरी तरह ही है। मेरे प्रश्न की कॉपी राइटिंग को पूरा करने का एक बड़ा हिस्सा है। :-P
हेनरिक

1
@ समय: :) आपकी कॉपी राइटिंग बेकार नहीं जाती - यह भविष्य में अन्य लोगों को इसका समाधान खोजने में मदद करेगा, यहां तक ​​कि इसे एक डुप्लिकेट के रूप में बंद करना था
मार्क लॉन्गेयर

2
जो कोई भी इस सवाल पर आता है , वह पहले कमेंट के संदेश को बदलने के लिए मेरा जवाब पा सकता है ? (git) सहायक होना।

जवाबों:


214

करना git rebase -i --root

( rootएक विशिष्ट कमिट की ओर इशारा करने के बजाय इंगित करें)

इस तरह, पहला कमिट भी शामिल है और आप rewordइसे किसी भी अन्य कमिट की तरह ही कर सकते हैं।

--rootविकल्प Git में पेश किया गया था v1.7.12(2012)। इससे पहले एकमात्र विकल्प का उपयोग करना था filter-branchया --amend, जो आम तौर पर करना मुश्किल है।

नोट: इसी तरह का प्रश्न और उत्तर भी देखें ।


12

आप हमेशा उपयोग कर सकते हैं git filter-branch --msg-filter:

git filter-branch --msg-filter \
  'test $GIT_COMMIT = '$(git rev-list --reverse master |head -n1)' &&
echo "Nice message" || cat' master

1
फोर्क0: यह बहुत अच्छा है, धन्यवाद। जिज्ञासु, क्या यह बेहतर शब्द की कमी के लिए "वैध" अभ्यास माना जाता है। मेरा मतलब है, क्या यह इस तरह से करना आम है / अनुशंसित है? इसके अलावा, क्या आप दोषपूर्ण प्रतिबद्ध संदेशों के मामलों में इस बार और फिर से कर सकते हैं? यह पूछने का कारण यह है क्योंकि मैंने पहली बार गलत कमिट SHA-1 के साथ किया था, आपके स्निपेट को कॉपी करना (आपका नवीनतम कमिटमेंट था जबकि मैं पहले वाले को बदलना चाहता था)। एक बार फिर से कमांड का उपयोग करने के बाद, इस बार सही SHA-1 (पहली प्रतिबद्ध; 6707a66) के साथ, यह मुझ पर रोक लगा दी।
हेनरिक

खैर, यह आम है :) और हाँ, आप इसे दोहरा सकते हैं। यदि आप बस जोड़ते हैं तो -fयह आगे बढ़ेगा और हमेशा दिए गए शाखा के कमिट को फिर से लिखेगा। आपके द्वारा refs/original/masterकमांड चलाने से पहले पहली बार से शाखा संदर्भ मान सहेजा गया था ।
कांटा 0

बेशक, आप सहेजे गए संदर्भ को केवल हटा सकते हैं (या नाम बदल सकते हैं)।
कांटा 0

2
मैंने यह सुनिश्चित करने के लिए कोड को अपडेट किया कि कॉपी की गई आईडी के साथ गलती नहीं होती है। अब कोड भी कॉपी-पेस्ट करने योग्य है। चेतावनी का एक शब्द , हालांकि: यह सही ढंग से काम नहीं करता है अगर एक से अधिक प्रारंभिक प्रतिबद्ध हैं (यानी जब आप दो या अधिक असंबंधित शाखाओं को
मिलाते हैं

3
@ समय: आपको ज्ञात होना चाहिए कि "प्रकाशित इतिहास" मानी जाने वाली किसी भी प्रतिबद्धता को लिखना आमतौर पर एक बुरा विचार है। आपके मामले में, इसका मतलब यह होगा कि आम तौर पर आपको ऐसा नहीं करना चाहिए, अगर कोई अन्य व्यक्ति कभी ऐसा काम कर रहा हो, जो आपके पूर्वज के रूप में जड़ हो।
मार्क लॉन्गेयर

12

pcreux के जिस्ट के पास पहले कमिट को पुनःप्राप्त करने का एक अच्छा तरीका है:

# You can't use rebase -i here since it takes the parent commit as argument.
# You can do the following though:
git checkout FIRST_COMMIT_SHA && git commit --amend && git rebase HEAD master

3
के रूप में Git 1.7.12 , git rebase -i --rootजाने के लिए, के रूप में florisla ने सुझाव दिया तरीका है।
डगलस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.