मैंने एक गलत संदेश में गलत बात लिखी।
मैं संदेश कैसे बदल सकता हूं? अभी तक कमिटमेंट को आगे नहीं बढ़ाया गया है।
मैंने एक गलत संदेश में गलत बात लिखी।
मैं संदेश कैसे बदल सकता हूं? अभी तक कमिटमेंट को आगे नहीं बढ़ाया गया है।
जवाबों:
git commit --amend
आपके संपादक को खोल देगा, जिससे आप सबसे हालिया प्रतिबद्ध संदेश को बदल सकते हैं। इसके अतिरिक्त, आप कमांड लाइन में सीधे संदेश भेज सकते हैं:
git commit --amend -m "New commit message"
… हालाँकि, यह बहु-पंक्ति प्रतिबद्ध संदेश या छोटे सुधार को अधिक बोझिल बना सकता है।
सुनिश्चित करें कि आप किसी भी कार्य की नकल परिवर्तन की जरूरत नहीं है का मंचन किया ऐसा करने से पहले या वे बहुत प्रतिबद्ध हो जाएगा। ( बिना परिवर्तन किए हुए परिवर्तन प्रतिबद्ध नहीं होंगे।)
यदि आपने पहले ही अपनी प्रतिबद्ध शाखा को अपनी दूरस्थ शाखा में धकेल दिया है, तो - स्थानीय रूप से अपनी प्रतिबद्धता में संशोधन करने के बाद (जैसा कि ऊपर बताया गया है) - आपको कमिट को बल देने की भी आवश्यकता होगी :
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
चेतावनी: बल-धक्का आपके स्थानीय एक की स्थिति के साथ दूरस्थ शाखा को अधिलेखित कर देगा । यदि आपके स्थानीय शाखा में आपके पास दूरस्थ शाखा नहीं है, तो आप उन आवागमन को खो देंगे।
चेतावनी: संशोधन के बारे में सतर्क रहें कि आप पहले से ही अन्य लोगों के साथ साझा कर चुके हैं। संशोधित करना अनिवार्य रूप से उन्हें अलग-अलग SHA ID करने के लिए फिर से लिखता है , जो एक समस्या बनती है अगर अन्य लोगों की पुरानी प्रतिबद्धताओं की प्रतियां हैं जिन्हें आपने फिर से लिखा है। जिस किसी के पास पुरानी कमेटी की कॉपी है, उसे आपके नए री-लिखित कमिटमेंट के साथ अपने काम को सिंक्रोनाइज़ करना होगा, जो कभी-कभी मुश्किल हो सकता है, इसलिए यह सुनिश्चित करें कि जब आप साझा कमिट हिस्ट्री को दोबारा लिखने की कोशिश कर रहे हों, या फिर साझा किए गए रिट्वीट्स को लिखने से बचें। कुल मिलाकर।
एक अन्य विकल्प इंटरैक्टिव रिबेस का उपयोग करना है। यह आपको किसी भी संदेश को संपादित करने की अनुमति देता है, भले ही वह नवीनतम संदेश न हो।
गिट स्क्वैश करने के लिए, इन चरणों का पालन करें:
// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n
एक बार जब आप अपना कमिट स्क्वैश करते हैं - e/r
संदेश संपादित करने के लिए चुनें :
जब आप उपयोग करते हैं तो n कमिट से अधिकgit rebase -i HEAD~n
हो सकते हैं । Git अंतिम n कमिट्स में सभी कमिट्स को "कलेक्ट" करेगा, और अगर उस रेंज के बीच में कहीं मर्ज था तो आप सभी कमिट्स को भी देखेंगे, इसलिए परिणाम n + होगा।
यदि आपको इसे एक से अधिक शाखा के लिए करना है और सामग्री में संशोधन करते समय आपको संघर्षों का सामना करना पड़ सकता है, तो सेट करें git rerere
और Git को आपके लिए स्वचालित रूप से उन विरोधों को हल करने दें।
git commit --amend
रूप में के रूप में शक्तिशाली नहीं है git rebase -i
।
git commit --amend
(ए?) मास्टर कमिट को ठीक कर सकते हैं।
git push -f origin branchname
git push -f
यदि अन्य लोग उसी रिपॉजिटरी का उपयोग कर रहे हैं तो @hughes थोड़ा खतरनाक नहीं है?
git commit --amend -c HEAD
। यह संपादक को आपके पुराने प्रतिबद्ध संदेश के साथ पूर्व-आबादी वाला खोल देगा, ताकि आप इसे बदल सकें।
git commit --amend -m "your new message"
यदि आप जिस समस्या को ठीक करना चाहते हैं वह सबसे हाल का नहीं है:
git rebase --interactive $parent_of_flawed_commit
यदि आप कई त्रुटिपूर्ण आवागमन ठीक करना चाहते हैं, तो उनमें से सबसे पुराने माता-पिता को पास करें।
आपके द्वारा दिए गए सभी कमिट की सूची के साथ एक संपादक सामने आएगा।
pick
करने के लिए reword
(या पुराने के लिए Git के संस्करणों, पर edit
) किसी भी करता आप ठीक करना चाहते हैं के सामने।प्रत्येक कमिट के लिए जिसे आप पुन: लिखना चाहते हैं , Git आपको अपने संपादक में वापस छोड़ देगा। प्रत्येक उस कमिट के लिए जिसे आप संपादित करना चाहते हैं , Git आपको शेल में छोड़ देता है। यदि आप शेल में हैं:
git commit --amend
git rebase --continue
इस क्रम के अधिकांश आपको विभिन्न कमांड के आउटपुट द्वारा समझाया जाएगा जैसे आप जाते हैं। यह बहुत आसान है; आपको इसे याद करने की आवश्यकता नहीं है - बस याद रखें कि git rebase --interactive
आपको सही तरीके से कमिट करने देता है चाहे वे कितने समय पहले थे।
ध्यान दें कि आप उन बदलावों को बदलना नहीं चाहेंगे जिन्हें आपने पहले ही धकेल दिया है। या हो सकता है कि आप करते हों, लेकिन उस स्थिति में आपको उन सभी के साथ संवाद करने में बहुत सावधानी बरतनी होगी, जिन्होंने आपके कमिट को खींचा होगा और उनमें से शीर्ष पर काम किया होगा। किसी को रिबास या किसी प्रकाशित शाखा को रीसेट करने के बाद मैं कैसे पुनर्प्राप्त / पुन: सिंक्रनाइज़ कर सकता हूं?
reword
के pick
लिए उपयोग कर सकते हैं ।
$parent_of_flawed_commit
के बराबर है $flawed_commit^
।
-p
( --preserve-merges
) दोषपूर्ण प्रतिबद्ध के बाद एक मर्ज था।
पिछली प्रतिबद्धताओं में संशोधन करने के लिए, वे परिवर्तन करें जिन्हें आप चाहते हैं और उन परिवर्तनों को चरणबद्ध करें, और फिर चलाएं
git commit --amend
यह आपके पाठ संपादक में एक फ़ाइल खोलेगा जो आपके नए प्रतिबद्ध संदेश का प्रतिनिधित्व करेगा। यह आपके पुराने प्रतिबद्ध संदेश से पाठ के साथ आबादी से शुरू होता है। जैसा आप चाहते हैं, वैसा संदेश बदलें, फिर फ़ाइल को सहेजें और समाप्त करने के लिए अपने संपादक को छोड़ दें।
पिछली प्रतिबद्धता में संशोधन करने के लिए और एक ही लॉग संदेश रखें, चलाएं
git commit --amend -C HEAD
इसे पूरी तरह से हटाकर पिछले प्रतिबद्ध को ठीक करने के लिए, चलाएं
git reset --hard HEAD^
यदि आप एक से अधिक प्रतिबद्ध संदेश संपादित करना चाहते हैं, तो चलाएं
git rebase -i HEAD~commit_count
(बदलें commit_count प्रतिबद्ध की संख्या के साथ कि आप संपादित करना चाहते हैं।) यह आदेश अपने संपादक की शुरूआत। पहले कमिट (वह जिसे आप बदलना चाहते हैं) को "पिक" के बजाय "एडिट" के रूप में चिह्नित करें, फिर अपने संपादक को सहेजें और बाहर निकलें। वह बदलाव करें जो आप करना चाहते हैं और फिर चलाएं
git commit --amend
git rebase --continue
नोट: आपके द्वारा खोले गए संपादक से "आप जो चाहें बदलाव करें" भी कर सकते हैं git commit --amend
git rebase -i HEAD~commit_count
हालाँकि, आपको अपने द्वारा चुने गए कई कमिट्स के प्रतिबद्ध संदेशों को बदलने की अनुमति देगा। बस चुने हुए कमिट्स को "पिक" के बजाय "reword" के रूप में चिह्नित करें।
git reset --hard
अनचाहे परिवर्तनों को मिटा देता है। कृपया के --hard
साथ बदलें --soft
।
git reset --hard
एक पूरी तरह से वैध आदेश है, लेकिन यह प्रश्न को देखते हुए भ्रामक है। --hard
यदि आप उन परिवर्तनों को करते हैं जो आप फेंकना चाहते हैं, तो आप उपयोग करते हैं, न कि यदि आपने प्रतिबद्ध संदेश में टाइपो बनाया है!
जैसा कि पहले ही उल्लेख किया गया है, git commit --amend
अंतिम प्रतिबद्ध को अधिलेखित करने का तरीका है। एक नोट: यदि आप फ़ाइलों को अधिलेखित करना चाहते हैं , तो कमांड होगी
git commit -a --amend -m "My new commit message"
git add file.ext
तो बसgit commit --amend
आप उसके लिए भी उपयोग कर सकते हैं git filter-branch
।
git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD
यह एक तुच्छ के रूप में आसान नहीं है git commit --amend
, लेकिन यह विशेष रूप से उपयोगी है, अगर आपके पहले से ही गलत संदेश के बाद कुछ मर्ज हैं।
ध्यान दें कि यह हर प्रतिबद्ध HEAD
और त्रुटिपूर्ण प्रतिबद्ध के बीच फिर से लिखने की कोशिश करेगा , इसलिए आपको अपनी msg-filter
आज्ञा बहुत बुद्धिमानी से चुननी चाहिए;
$flawed_commit^..HEAD
, नहीं $flawed_commit..HEAD
। जैसा कि मैन पेज द्वारा कहा गया है: « कमांड कमांड लाइन में उल्लिखित सकारात्मक रीफ्स को फिर से लिखेगी (जैसे कि यदि आप a..b पास करते हैं, तो केवल बी को फिर से लिखा जाएगा)। »
मैं इस तरह से पसंद करता हूं:
git commit --amend -c <commit ID>
अन्यथा, एक नई प्रतिबद्ध आईडी के साथ एक नई प्रतिबद्धता होगी।
-c
कुछ काम करता है। यह डिफ़ॉल्ट रूप से पुराने संदेश का उपयोग करता है, लेकिन यह लेखक की जानकारी (व्यक्ति और समय) को भी कॉपी करता है। -C
एक ही बात करता है सिवाय इसके कि यह आपको संदेश को संपादित करने के लिए नहीं कहता है।
fatal: Option -m cannot be combined with -c/-C/-F/--fixup.
यदि आप Git GUI टूल का उपयोग कर रहे हैं, तो एक बटन है जिसका नाम है Amend last प्रतिबद्ध है । उस बटन पर क्लिक करें और फिर यह आपकी अंतिम प्रतिबद्ध फ़ाइलों और संदेश को प्रदर्शित करेगा। बस उस संदेश को संपादित करें, और आप इसे एक नए प्रतिबद्ध संदेश के साथ कर सकते हैं।
या कंसोल / टर्मिनल से इस कमांड का उपयोग करें:
git commit -a --amend -m "My new commit message"
आप गिट रीबासिंग का उपयोग कर सकते हैं । उदाहरण के लिए, यदि आप bbc643cd को वापस करने के लिए संशोधित करना चाहते हैं, तो चलाएं
$ git rebase bbc643cd^ --interactive
डिफ़ॉल्ट संपादक में, लाइन में 'पिक' को 'एडिट' में संशोधित करें, जिसके लिए आप संशोधित करना चाहते हैं। अपने परिवर्तन करें और फिर उनके साथ मंचित करें
$ git add <filepattern>
अब आप उपयोग कर सकते हैं
$ git commit --amend
प्रतिबद्ध को संशोधित करने के लिए, और उसके बाद
$ git rebase --continue
वापस पिछले सिर पर वापस जाने के लिए।
git commit --amend
आप उपयोग कर सकते हैं git show
और यह नया संदेश दिखाएगा।
यदि आप केवल अपने अंतिम प्रतिबद्ध संदेश को संशोधित करना चाहते हैं, तो करें:
git commit --amend
जो आपको अपने पाठ संपादक में छोड़ देगा और आपको अंतिम प्रतिबद्ध संदेश को बदलने देगा।
यदि आप अंतिम तीन प्रतिबद्ध संदेश या उस बिंदु तक कोई भी प्रतिबद्ध संदेश बदलना चाहते हैं, HEAD~3
तो git rebase -i
कमांड को आपूर्ति करें :
git rebase -i HEAD~3
git commit --amend
, और यह भी कहता है कि आप उपयोग कर सकते हैं git rebase -i HEAD~commit_count
, तुम सब किया था में प्लग था 3
के लिए commit_count
।
यदि आपको कई शाखाओं पर एक पुराना प्रतिबद्ध संदेश बदलना है (यानी, गलत संदेश के साथ प्रतिबद्ध कई शाखाओं में मौजूद है) जिसका आप उपयोग करना चाहते हैं:
git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all
Git पुनर्लेखन के लिए एक अस्थायी निर्देशिका बनाएगा और इसके अतिरिक्त बैकअप पुराने संदर्भों में आएगा refs/original/
।
-f
ऑपरेशन के निष्पादन को लागू करेगा। यह आवश्यक है यदि अस्थायी निर्देशिका पहले से मौजूद है या यदि पहले से ही संग्रहीत संदर्भ हैं refs/original
। यदि ऐसा नहीं है, तो आप इस ध्वज को गिरा सकते हैं।
--
संशोधन विकल्प से फ़िल्टर-शाखा विकल्प अलग करता है।
--all
यह सुनिश्चित करेगा कि सभी शाखाएँ और टैग पुनः लिखे जाएँ।
अपने पुराने संदर्भों के बैकअप के कारण, आप कमांड निष्पादित करने से पहले आसानी से वापस जा सकते हैं।
कहो, आप अपने स्वामी को पुनर्प्राप्त करना चाहते हैं और उसकी शाखा में पहुँचना चाहते हैं old_master
:
git checkout -b old_master refs/original/refs/heads/master
git commit --amend
की टिप्पणियां अप को ठीक करने या फ़ाइलों मैं भूल गया जोड़ने के लिए git add
है, लेकिन केवल कभी इससे पहले कि मैं गया है git push
एड। मैं भी उपयोग करता git filter-branch
हूं जब मैं पूरी तरह से संस्करण इतिहास के साथ गड़बड़ करना चाहता हूं, लेकिन ओपी यह नहीं चाहता है, इसलिए इस जवाब को एक बड़ी स्वास्थ्य चेतावनी की आवश्यकता है - घर पर इस कोशिश मत करो, झांकना !!
उपयोग
git commit --amend
इसे विस्तार से समझने के लिए, एक उत्कृष्ट पोस्ट है 4. रिट्रींग गिट हिस्ट्री । यह भी जब उपयोग नहीं करने के बारे में बात करता है git commit --amend
।
git commit --amend
जवाब पहले से ही (कई बार) दिया गया था इससे पहले कि आप तुम्हारा लिखा था। आपने इसे फिर से क्यों पोस्ट किया? यदि आप "रिस्ट्रिटिंग गिट हिस्ट्री" का लिंक जोड़ना चाहते हैं, तो आप मौजूदा उत्तरों में से एक को संपादित कर सकते हैं, या एक टिप्पणी छोड़ सकते हैं।
आपके पास यहां कुछ विकल्प हैं। तुम कर सकते हो
git commit --amend
जब तक यह आपकी आखिरी प्रतिबद्धता है।
अन्यथा, यदि यह आपकी अंतिम प्रतिबद्धता नहीं है, तो आप एक इंटरैक्टिव रिबेस कर सकते हैं,
git rebase -i [branched_from] [hash before commit]
तब इंटरएक्टिव रिबेस के अंदर आप बस उस कमिट में एडिट कर देते हैं। जब यह आता है, तो एक करें git commit --amend
और प्रतिबद्ध संदेश को संशोधित करें। यदि आप उस कमिट बिंदु से पहले वापस रोल करना चाहते हैं, तो आप उपयोग भी कर सकते हैं git reflog
और बस उस कमिट को हटा सकते हैं। तब आप बस git commit
फिर से करते हैं।
यदि यह आपकी अंतिम प्रतिबद्धता है, तो केवल इस संशोधन में संशोधन करें:
git commit --amend -o -m "New commit message"
( यह सुनिश्चित करने के लिए कि आप केवल प्रतिबद्ध संदेश बदलते हैं) -o
( --only
) ध्वज का उपयोग करना
यदि यह एक दफन प्रतिबद्ध है, तो भयानक इंटरैक्टिव रिबास का उपयोग करें :
git rebase -i @~9 # Show the last 9 commits in a text editor
प्रतिबद्ध आप चाहते हैं, परिवर्तन का पता लगाएं pick
करने के लिए r
( reword
), और बचाने के लिए और करीब फ़ाइल। किया हुआ!
लघु विम ट्यूटोरियल (या, केवल 8 कीस्ट्रोक्स के साथ रिबेस कैसे करें 3j
cw
r
EscZZ
):
vimtutor
अगर आपके पास समय हो तो चलाएंh
j
k
l
आंदोलन कुंजी के अनुरूप ←↓↑→3j
तीन लाइनें नीचे जाती हैंi
डालने के लिए मोड - आपके द्वारा टाइप किया गया पाठ फ़ाइल में दिखाई देगाc
सम्मिलित मोड से बाहर निकलें और "सामान्य" मोड पर लौटेंu
पूर्ववत करने के लिएr
फिर से करनाdd
, dw
, dl
एक पंक्ति, शब्द या अक्षर क्रमश: नष्ट करने के लिएcc
, cw
, cl
एक पंक्ति, शब्द या अक्षर में क्रमश: (के रूप में ही बदलने के लिएdd
i
)yy
, yw
, yl
( "झटका"), क्रमशः कॉपी करने के लिए एक पंक्ति, शब्द या अक्षरp
या P
बाद में, या वर्तमान स्थिति से पहले पेस्ट करने के लिए:w
Enter एक फ़ाइल को बचाने (लिखने) के लिए:q!
Enter बिना बचत के छोड़ना:wq
Enter या ZZ
बचाने और छोड़ने के लिएयदि आप पाठ को बहुत संपादित करते हैं, तो ड्वोरक कीबोर्ड लेआउट पर जाएं , स्पर्श-प्रकार सीखें, और विम सीखें। क्या यह प्रयास के लायक है? हाँ।
ProTip ™: इतिहास को फिर से लिखने वाले "खतरनाक" आदेशों के साथ प्रयोग करने से डरो मत; - Git डिफ़ॉल्ट रूप से 90 दिनों के लिए आपके कमिट को नहीं हटाता है; आप उन्हें रिफ्लॉग में पा सकते हैं:
$ git reset @~3 # Go back three commits
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~3
2c52489 HEAD@{1}: commit: more changes
4a5246d HEAD@{2}: commit: make important changes
e8571e4 HEAD@{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started
* जैसे विकल्पों के लिए बाहर देखो --hard
और --force
यद्यपि - वे डेटा को त्याग सकते हैं।
* इसके अलावा, आप जिन भी शाखाओं में सहयोग कर रहे हैं, उन पर इतिहास को फिर से न लिखें।
nano
? हम उन तुच्छ संशोधनों के बारे में बात कर रहे हैं, जिन्हें टेक्स्ट फ़ाइल में किए जाने की आवश्यकता है, न कि हार्डकोर कोडिंग की, जो "सर्वश्रेष्ठ" टेक्स्ट एडिटर के बारे में एक लौ युद्ध उत्पन्न करेगा।
ddjjpZZ
एक प्रतिबद्ध 2 नीचे ले जाता है। बुनियादी विम ज्ञान के बारे में कुछ भी नहीं है; नैनो की तुलना में विम के साथ अधिक सहज होने में 10 मिनट लगते हैं।
यदि आप Git GUI का उपयोग कर रहे हैं, तो आप अंतिम प्रतिबद्ध में संशोधन कर सकते हैं, जिसके साथ धक्का नहीं दिया गया है:
Commit/Amend Last Commit
मैं जितने जीआईटी जीआईआई का उपयोग करता हूं, और वह आपको अंतिम प्रतिबद्ध संशोधन का विकल्प देता है:
इसके अलावा, git rebase -i origin/master
एक अच्छा मंत्र है जो आपको हमेशा आपके द्वारा मास्टर के ऊपर किए गए कमिट के साथ पेश करेगा, और आपको संशोधन, हटाने, पुन: क्रम या स्क्वैश करने का विकल्प देगा। पहले उस हैश को पकड़ने की जरूरत नहीं है।
वाह, ऐसा करने के लिए बहुत सारे तरीके हैं।
फिर भी ऐसा करने का एक और तरीका यह है कि आप आखिरी कमिट को हटा दें, लेकिन इसके बदलाव को रखें ताकि आप अपना काम न खोएं। फिर आप सही संदेश के साथ एक और कमिट कर सकते हैं। यह कुछ इस तरह दिखेगा:
git reset --soft HEAD~1
git commit -m 'New and corrected commit message'
मैं हमेशा ऐसा करता हूं अगर मैं फ़ाइल जोड़ना या कोई बदलाव करना भूल जाता हूं।
--soft
इसके बजाय निर्दिष्ट करने के लिए याद रखें--hard
, अन्यथा आप पूरी तरह से खो देते हैं।
git commit --amend
सिवाय इसके कि यह 2-चरणीय प्रक्रिया है।
--amend
लेखक की जानकारी रखेगा, लेकिन सवाल केवल संदेश को बदलने के लिए कहता है।
पुराने संदेशों को संपादित करने में मदद करने के लिए विंडोज / मैक जीयूआई की तलाश करने वाले किसी के लिए (यानी सिर्फ नवीनतम संदेश नहीं), मैं सॉरीकेट्री की सिफारिश करूंगा । अनुसरण करने के चरण नीचे हैं।
उन कमिटों के लिए जिन्हें अभी तक रिमोट से नहीं धकेला गया है:
Unable to create 'project_path/.git/index.lock': File exists.
एक ही समय में कई प्रतिबद्ध संदेशों को संशोधित करने का प्रयास करते हुए इसे विफल देखा है । निश्चित रूप से यह निश्चित नहीं है कि यह मुद्दा क्या है, या क्या यह सॉर्केट्री के भविष्य के संस्करण में तय किया जाएगा, लेकिन अगर ऐसा होता है, तो उन्हें एक समय में एक को पुन: पेश करने की सिफारिश की जाएगी (धीमी लेकिन अधिक विश्वसनीय लगती है)।... या ... उन कमिटों के लिए जिन्हें पहले ही धकेल दिया गया है:
इस उत्तर में दिए गए चरणों का पालन करें , जो ऊपर दिए गए समान हैं, लेकिन git push origin <branch> -f
शाखा को बल देने के लिए कमांड लाइन ( ) से आगे कमांड चलाने की आवश्यकता है । मैं यह सब पढ़ने और आवश्यक सावधानी बरतने की सलाह देता हूँ!
यदि आप केवल नवीनतम प्रतिबद्ध को संपादित करना चाहते हैं, तो उपयोग करें:
git commit --amend
या
git commit --amend -m 'one line message'
लेकिन अगर आप कई कमिट्स को एक पंक्ति में संपादित करना चाहते हैं, तो आपको इसके बजाय रिबासिंग का उपयोग करना चाहिए:
git rebase -i <hash of one commit before the wrong commit>
किसी फ़ाइल में, जैसा ऊपर लिखा है, लिखें edit/e
या अन्य विकल्पों में से एक, और हिट सहेजें और बाहर निकलें।
अब आप पहली गलत कमिटमेंट में होंगे। फाइलों में बदलाव करें, और वे आपके लिए अपने आप मंचित हो जाएंगे। प्रकार
git commit --amend
उस प्रकार को सहेजें और बाहर निकलें
git rebase --continue
अपने सभी चयनों के साथ समाप्त होने तक अगले चयन में जाने के लिए।
ध्यान दें कि ये चीजें उस विशेष प्रतिबद्ध के बाद आपके सभी SHA हैश को बदल देती हैं।
आप का उपयोग करना चाहिए आप केवल अपने अंतिम संदेश बदलना चाहते हैं --only
झंडा या उसके शॉर्टकट -o
के साथ commit --amend
:
git commit --amend -o -m "New commit message"
यह सुनिश्चित करता है कि आप गलती से मंचन सामग्री के साथ अपनी प्रतिबद्धता नहीं बढ़ाते हैं। बेशक यह उचित $EDITOR
कॉन्फ़िगरेशन के लिए सबसे अच्छा है । फिर आप -m
विकल्प को छोड़ सकते हैं, और Git पुराने संदेश के साथ प्रतिबद्ध संदेश को पूर्व-भर देगा। इस तरह इसे आसानी से संपादित किया जा सकता है।
git commit --amend
। प्रश्न बहुत विशिष्ट था, इसलिए अधिक लंबा! = बेहतर। -o
ध्वज के निर्णायक उल्लेख को संभवतः बाकी जानकारी में दफन किया जाएगा। मैं एक उत्तर को संपादित करने में भी सहज नहीं हूं, जिसमें पहले से ही बहुत सारे वोट हैं।
--only
विकल्प --amend
1.3.0.3 के बाद से उपलब्ध है, जब तक कि यह 1.7.11.3 ( e2d4ed35902ce1595996565868680802727313117c ) में तय नहीं किया गया था । तो 2008 में वापस सही उत्तर शायद कुछ इस तरह होगा git stash; git commit --amend; git stash pop
:।
अपने अंतिम गलत संदेश को एक पंक्ति में नए प्रतिबद्ध संदेश के साथ अपडेट करें:
git commit --amend -m "your new commit message"
या, नीचे की तरह गेट रीसेट का प्रयास करें:
# You can reset your head to n number of commit
# NOT a good idea for changing last commit message,
# but you can get an idea to split commit into multiple commits
git reset --soft HEAD^
# It will reset you last commit. Now, you
# can re-commit it with new commit message.
git reset
आपको कई कमिट्स में एक कमिट को तोड़ने में मदद कर सकता है:
# Reset your head. I am resetting to last commits:
git reset --soft HEAD^
# (You can reset multiple commit by doing HEAD~2(no. of commits)
# Now, reset your head for splitting it to multiple commits
git reset HEAD
# Add and commit your files separately to make multiple commits: e.g
git add app/
git commit -m "add all files in app directory"
git add config/
git commit -m "add all files in config directory"
यहां आपने अपनी पिछली प्रतिबद्धताओं को सफलतापूर्वक दो कमिट में तोड़ दिया है।
git commit --amend
, ठीक वैसे ही जैसे कि यह शीर्ष मतदान जवाब में कैसे कहता है । इसके अतिरिक्त, इस पहले के उत्तरgit reset --soft HEAD^
में सॉफ्ट रीसेट के लिए समान रूप से काम करता है , क्योंकि वे दोनों पहले माता-पिता के लिए वापस रीसेट करते हैं।
git reset
समाधान करने के लिए एक प्रतिबद्ध संदेश को कई प्रतिबद्ध संदेशों में विभाजित करने के लिए एक विचार देने के लिए जोड़ने के लिए परेशान करता हूं । क्योंकि, मैंने उस समस्या का सामना किया है, जब मैं उपयोग करना शुरू कर रहा था git
। कभी-कभी, यह वास्तव में सहायक हो सकता है। :)
इस सवाल पर बहुत सारे उत्तर हैं, लेकिन उनमें से कोई भी सुपर विस्तार से नहीं बताता है कि विम का उपयोग करके पुराने प्रतिबद्ध संदेशों को कैसे बदलना है । मैं खुद ऐसा करने की कोशिश कर रहा था, इसलिए यहां मैं विस्तार से लिखूंगा कि मैंने विशेष रूप से ऐसे लोगों के लिए कैसे किया, जिन्हें विम का कोई अनुभव नहीं है!
मैं अपने पाँच नवीनतम कमिट बदलना चाहता था जिसे मैंने पहले ही सर्वर पर धकेल दिया था। यह काफी 'खतरनाक' है क्योंकि अगर किसी और को पहले से ही खींच लिया गया है, तो आप प्रतिबद्ध संदेशों को बदलकर चीजों को गड़बड़ कर सकते हैं। हालाँकि, जब आप अपनी छोटी शाखा पर काम कर रहे हों और सुनिश्चित हो कि कोई भी इसे खींच नहीं रहा है तो आप इसे इस तरह बदल सकते हैं:
मान लें कि आप अपने पांच नवीनतम आवागमन बदलना चाहते हैं, और फिर आप इसे टर्मिनल में टाइप करते हैं:
git rebase -i HEAD~5
* जहां 5 ऐसे कमिट मैसेज की संख्या है जिसे आप बदलना चाहते हैं (इसलिए यदि आप 10 वीं को आखिरी कमिट में बदलना चाहते हैं, तो आप 10 में टाइप करें)।
यह कमांड आपको विम में ले जाएगी जहां आप अपना कमिटमेंट हिस्ट्री एडिट कर सकते हैं। आप इस तरह से शीर्ष पर अपने अंतिम पाँच कमिट देखेंगे:
pick <commit hash> commit message
इसके बजाय pick
आपको लिखने की जरूरत है reword
। आप इसे टाइप करके विम में कर सकते हैं i
। यह आपको इन्सर्ट मोड में जाता है। (आप देखते हैं कि आप नीचे INSERT शब्द के द्वारा इन्सर्ट मोड में हैं ।) उन कमिटों के लिए जिन्हें आप बदलना चाहते हैं, reword
इसके बजाय टाइप करें pick
।
फिर आपको इस स्क्रीन को सहेजने और छोड़ने की आवश्यकता है। आप Escबटन दबाकर पहले 'कमांड-मोड' में जा रहे हैं (आप जांच सकते हैं कि आप कमांड-मोड में हैं यदि तल पर INSERT शब्द गायब हो गया है)। फिर आप टाइप करके कमांड टाइप कर सकते हैं :
। बचाने और छोड़ने की आज्ञा है wq
। इसलिए यदि आप :wq
सही रास्ते पर हैं।
फिर विम आपके द्वारा किए गए प्रत्येक संदेश पर चला जाएगा, और यहां आप वास्तव में प्रतिबद्ध संदेशों को बदल सकते हैं। आप सम्मिलित रूप से मोड में जाकर, कमिट मैसेज को बदलकर, कमांड-मोड में जाकर, और सेव करके और छोड़ कर करेंगे। यह पांच बार करो और तुम विम से बाहर हो!
फिर, यदि आपने पहले से ही अपने गलत कामों को आगे बढ़ाया है, तो आपको git push --force
उन्हें अधिलेखित करने की आवश्यकता है । याद रखें कि git push --force
यह करने के लिए काफी खतरनाक चीज है, इसलिए सुनिश्चित करें कि जब तक आपने अपना गलत काम नहीं किया है, तब तक किसी ने सर्वर से नहीं खींचा है!
अब आपने अपने प्रतिबद्ध संदेशों को बदल दिया है!
(जैसा कि आप देख रहे हैं, मैं विम में अनुभव नहीं कर रहा हूँ, इसलिए यदि मैंने गलत 'लिंगो' का उपयोग किया, तो यह बताने के लिए कि क्या हो रहा है, मुझे सुधारने के लिए स्वतंत्र महसूस करें!)
<nitpick>
स्टैक ओवरफ्लो पर कोई "थ्रेड्स" नहीं हैं, क्योंकि यह एक चर्चा मंच नहीं है, केवल "प्रश्न", "उत्तर", और "पोस्ट" हैं। </nitpick>
। इसके अलावा, विम के सभी संस्करण समान नहीं हैं, उनमें से सभी आपको सम्मिलन मोड में वर्णों को हटाने नहीं देंगे (एक तरह से समझ में आता है, ठीक है?)। यदि आप हमेशा Vim में वर्णों को हटाने में सक्षम होना चाहते हैं, X
और x
ऐसा करेंगे ( x
कर्सर के सामने वर्णों को हटाता है, X
हटा देगा)। यदि आप गलती करते हैं, तो आप u
पूर्ववत करने के लिए बार-बार उपयोग कर सकते हैं । अंत में, इंटरएक्टिव रिबेस संपादक में r
शॉर्टहैंड है reword
।
cw
इसकी शुरुआत में टाइप किया जाता है (हालांकि सवाल विम के बारे में नहीं है, मैं सहमत हूं)।
nano
या मिडनाइट कमांडर की मिसिट।
आप git-rebase-reword का उपयोग कर सकते हैं
इसे किसी भी तरह से संपादित करने के लिए डिज़ाइन किया गया है (पिछले नहीं) उसी तरह commit --amend
$ git rebase-reword <commit-or-refname>
यह एक प्रतिबद्ध संशोधन करने के लिए रिबेट इंटरएक्टिव पर कार्रवाई के बाद नामित किया गया है: "पुनर्मुद्रण"। देखें यह पोस्ट और मैन -सेंसर इंटरेक्टिव मोड-
उदाहरण:
$ git rebase-reword b68f560
$ git rebase-reword HEAD^
g c; g rb -i @~9
(प्रतिबद्ध और रिबेस), ले जाने के नए जहां मैं यह चाहते करने के लिए प्रतिबद्ध हैं, तो परिवर्तन commit
करने के लिए f
( fixup
), और बचाने के लिए। यदि आप उससे कुछ तेज चाहते थे, तो आप उर्फ git commit --fixup=<commit>; git rebase -i --autosquash <commit>^
मैंने उपनाम reci
और इसके recm
लिए जोड़ा recommit (amend)
है। अब मैं के साथ यह कर सकते हैं git recm
या git recm -m
:
$ vim ~/.gitconfig
[alias]
......
cm = commit
reci = commit --amend
recm = commit --amend
......
मुझे एहसास हुआ कि मैंने इसमें एक टाइपो के साथ एक प्रतिबद्ध किया था। पूर्ववत करने के लिए, मैंने निम्नलिखित कार्य किया:
git commit --amend -m "T-1000, advanced prototype"
git push --force
चेतावनी: अपने परिवर्तनों को धकेलने वाला बल आपके स्थानीय एक के साथ दूरस्थ शाखा को अधिलेखित कर देगा। सुनिश्चित करें कि आप कुछ भी नहीं लिखना चाहते हैं जो आप रखना चाहते हैं। यदि कोई और शाखा आपके साथ साझा करता है, तो संशोधित (पुन: लिखित) प्रतिबद्ध करने के लिए बाध्य करने के बारे में भी सतर्क रहें, क्योंकि उन्हें अपने स्वयं के इतिहास को फिर से लिखने की आवश्यकता होगी यदि उनके पास उस प्रतिबद्ध की पुरानी प्रति है जिसे आपने अभी लिखा है।
मुझे निम्नलिखित का उपयोग करना पसंद है:
git status
git add --all
git commit -am "message goes here about the change"
git pull <origin master>
git push <origin master>
यदि आपने कोड को अपनी दूरस्थ शाखा ( GitHub / Bitbucket ) में नहीं धकेला है तो आप नीचे दिए गए कमांड लाइन पर प्रतिबद्ध संदेश को बदल सकते हैं।
git commit --amend -m "Your new message"
यदि आप एक विशिष्ट शाखा पर काम कर रहे हैं तो ऐसा करें:
git commit --amend -m "BRANCH-NAME: new message"
यदि आपने पहले ही कोड को गलत संदेश के साथ धकेल दिया है, और आपको संदेश बदलते समय सावधानी बरतने की आवश्यकता है। यही है, जब आप प्रतिबद्ध संदेश बदलते हैं और इसे फिर से धकेलने का प्रयास करते हैं, तो आपके पास समस्याएँ हैं। इसे सुचारू बनाने के लिए, इन चरणों का पालन करें।
कृपया इसे करने से पहले मेरा पूरा उत्तर पढ़ें।
git commit --amend -m "BRANCH-NAME : your new message"
git push -f origin BRANCH-NAME # Not a best practice. Read below why?
महत्वपूर्ण नोट: जब आप सीधे बल पुश का उपयोग करते हैं तो आप कोड मुद्दों के साथ समाप्त हो सकते हैं जो अन्य डेवलपर्स एक ही शाखा पर काम कर रहे हैं। तो उन संघर्षों से बचने के लिए, आपको बल को धक्का देने से पहले अपनी शाखा से कोड खींचने की जरूरत है :
git commit --amend -m "BRANCH-NAME : your new message"
git pull origin BRANCH-NAME
git push -f origin BRANCH-NAME
यह सबसे अच्छा अभ्यास है जब यह पहले से ही धकेल दिया गया था, तो प्रतिबद्ध संदेश को बदलना।