जवाबों:
यदि आप --preserve-merges
विकल्प (या इसके पर्यायवाची -p
) को git rebase -i
कमांड में जोड़ते हैं , तो गिट इतिहास को रेखीय करने के बजाय पुनर्जागरण करते समय मर्ज को संरक्षित करने का प्रयास करेगा, और आपको मर्ज के कमिट में भी संशोधन करने में सक्षम होना चाहिए:
git rebase -i -p HEAD~5
HEAD~5
आप जिस प्रतिबद्धता को संशोधित करना चाहते हैं, उसके माता-पिता कहां हैं (आमतौर पर sha1 ^)।
--preserve-merges
अब है--rebase-merges
ध्यान दें कि, git1.7.9.6 (और git1.7.10 +) को शुरू करते हुए , git merge
आप हमेशा एक मर्ज में विवरण जोड़ने के लिए, संपादक को ट्रिगर करेंगे ।
"
git merge $tag
" एक एनोटेट टैग को मर्ज करने के लिए हमेशा एक इंटरैक्टिव एडिट सत्र के दौरान संपादक को खोलता है। v1.7.10 श्रृंखला ने पुराने स्क्रिप्ट को इस व्यवहार को कम करने में मदद करने के लिए एक पर्यावरण चर GIT_MERGE_AUTOEDIT पेश किया, लेकिन रखरखाव ट्रैक को भी इसका समर्थन करना चाहिए।
यह GIT_MERGE_AUTOEDIT
पुराने स्क्रिप्ट को इस व्यवहार को कम करने में मदद करने के लिए एक पर्यावरण चर का भी परिचय देता है।
" एंटी-गेटिंग 1.7.10 देखें" :
हाल ही में Git मेलिंग सूची पर एक चर्चा में , लाइनस ने स्वीकार किया (और मैं सहमत हूं) यह एक डिजाइन गलती थी जो हमने Git के इतिहास में जल्दी की थी।
और 1.7.10 और बाद में, git मर्ज कमांड जो एक संवादात्मक सत्र में चलाया जाता है (अर्थात इसके मानक इनपुट और टर्मिनल से जुड़े मानक आउटपुट दोनों), मर्ज परिणाम को रिकॉर्ड करने के लिए प्रतिबद्ध बनाने से पहले एक संपादक को खोल देगा, देने के लिए उपयोगकर्ता को मर्ज समझाने का मौका मिलता है, ठीक उसी तरह जैसे कि कमिट कमिट पहले से ही किए गए विवादित मर्ज को हल करने के बाद उपयोगकर्ता चलाता है।
लिनस ने कहा:
लेकिन मैं वास्तव में गहराई से परवाह नहीं करता हूं कि यह वास्तव में कैसे काम करता है - मेरा मुख्य मुद्दा यह है कि git इस तरह से मर्ज मैसेज करना बहुत आसान बना देता है।
मुझे लगता है कि इसका एक और भी सरल मुहावरा है: हम कभी भी संपादक को "git मर्ज" के लिए डिफ़ॉल्ट रूप से फायर नहीं करते हैं, लेकिन हम एक "git commit
" करते हैं।
यह एक डिजाइन गलती थी, और इसका मतलब है कि यदि आप वास्तव में एक मर्ज में एक नोट जोड़ना चाहते हैं, तो आपको अतिरिक्त काम करना होगा। तो लोग नहीं करते ।
ध्यान दें कि, Git 2.17 (Q2 2018) से पहले, " git rebase -p
" मर्ज किए गए लॉग मैसेज को कमिट कर देता है, जो अब तय हो गया है।
ग्रेगरी हेरेरो (``) द्वारा प्रतिबद्ध ed5144d (08 फरवरी 2018) देखें ।
सुझाया गया: वेजर्ड नोसुम ( ) , और क्वेंटिन कैसानोवस ( ) । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 8b49408 , 27 फ़र 2018)vegard
casasnovas
gitster
rebase -p
: कॉल करते समय गलत कमिट मैसेज को ठीक करेंgit merge
।चूंकि dd6fb00 ("
rebase -p
: कॉल करते समय फिक्सिंग को ठीक करेंgit merge
", जनवरी 2018, Git 2.16.0-rc2), मर्ज किए गए कमिट के मैसेज को रीबिज किया जा रहा है और इसे 'सबस्क्रिप्शन एक्जीक्यूट' का उपयोग करके मर्ज कमांड को पास किया जाता हैgit rev-parse --sq-quote
।इस सबमिशन के आसपास डबल कोट्स की जरूरत होती है, ताकि
git merge
कमांड के लिए नए सिरे रखे जाएं ।इस पैच से पहले, मर्ज संदेश का अनुसरण करें:
"Merge mybranch into mynewbranch Awesome commit."
हो जाता है:
"Merge mybranch into mynewbranch Awesome commit."
एक के बाद
rebase -p
।
Git 2.23 (Q2 2019) के साथ, " merge -c
" के दौरान " " निर्देश " git rebase --rebase-merges
उपयोगकर्ता को लॉग संदेश को संपादित करने का मौका देना चाहिए, भले ही अन्यथा एक नया मर्ज बनाने और मौजूदा एक को बदलने की आवश्यकता न हो (अर्थात इसके बजाय फास्ट-फॉरवर्ड करें) ), लेकिन नहीं किया।
जिसे सुधारा गया।
फिलिप वुड ( ) द्वारा प्रतिबद्ध 6df8df0 (02 मई 2019) देखें । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध c510261 , 13 जून 2019)phillipwood
gitster
केवल आदिम आदेशों का उपयोग करके एक और अच्छा जवाब - knittl https://stackoverflow.com/a/7599522/94687 द्वारा :
git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch
या एक बेहतर (अधिक सही) अंतिम रिबेस कमांड:
git rebase <sha of merge> previous_branch --onto HEAD
BTW, आदिम आदेशों का उपयोग करने के लिए बहुत अधिक सीपीयू का उपभोग नहीं करने का अच्छा "फीचर" हो सकता है और आपको अनजान समय का इंतजार करना होगा जब तक कि गिट को कमिट की सूची के बारे में सोचने की ज़रूरत न हो git rebase -p -i HEAD^^^^
(इस तरह के एक कमांड जो इस में परिणाम होगा केवल 4 अंतिम की सूची मर्ज के साथ शुरू होती है, क्योंकि मेरे मामले में पिछले मामले में लगभग 50 सेकंड लगे थे!)।
वर्तमान गिट संस्करणों के लिए (माई 2020):
git rebase -i -r <parent>
,
उसके बाद संपादक के merge -C ...
साथ बदलें merge -c ...
।
यह पुन: शुरू करने के दौरान संपादक में प्रतिबद्ध संदेश को खोलेगा, जहां आप इसे बदल सकते हैं।
git rebase -i HEAD~5
आदेश संपादक दिखाई नहीं देता। यह निर्दिष्ट कमिट्स को सूचीबद्ध करता है (इस मामले में उनमें से पांच)। पहले कॉलम में pick
हर कमिटमेंट होता है। बस उस संपादक के pick
साथ बदलें reword
और संपादक को + बंद करें सहेजें। तब Git संपादक पॉप अप होगा हर प्रतिबद्ध के लिए जहाँ आप बदल pick
करने के लिए reword
और आप संदेश के लिए प्रतिबद्ध संपादित करने देगा।
-p
को git rebase
आदेश।
! [rejected] HEAD -> master (non-fast-forward)error: failed to push some refs to