2013-05-14 6 views
23

मैंने रिमोट शाखा में विलय करने से पहले कुछ परीक्षण कोड किए हैं। इस विलय में बहुत सारे संघर्ष हुए और सही करने के लिए कुछ गंभीर समय लगा। तो मेरा इतिहास ऐसा कुछ दिखता है:विलय से पहले गिट प्रतिबद्धता के संदेश में संशोधन

7ab562c Merge from remote branch 
... whole load of commits brought across from the remote branch... 
f3e71c2 Temporary TESTING COMMIT 

परीक्षण कोड ठीक है, मैं वास्तव में केवल प्रतिबद्ध संदेश को बदलना चाहता हूं। आम तौर पर मैं git rebase -i f3e71c2^ (क्योंकि इनमें से कोई भी अभी तक धक्का नहीं दिया गया है) के साथ आगे बढ़ता है, लेकिन मुझे एक सहयोगी ने बताया है कि यह विलय को गड़बड़ कर देगा। मैं वास्तव में विलय को गड़बड़ नहीं करना चाहता हूं :)

क्या मेरे सहयोगी सही हैं? और यदि हां, तो क्या मैं कुछ भी कर सकता हूं, या क्या मुझे इस इतिहास के साथ रहने की ज़रूरत है?

+2

'गिट प्रतिबद्ध --amend'? – kan

+2

@kan: यह केवल नवीनतम प्रतिबद्धता में संशोधन के लिए काम करता है, जो यहां स्थिति नहीं है। – kampu

+4

कम डर की सिफारिश की! यदि आप गड़बड़ करते हैं, तो बस अपने पोस्ट-मर्ज स्थिति पर वापस जाने के लिए 'गिट रीसेट - 779562 सी' रीसेट करें और पुनः प्रयास करें। इसके अलावा, गिट रिटर्न को हल करने के तरीके को याद रखने के लिए 'गिट रीर्रे' देखें। – chrisk

उत्तर

31

आप के साथ एक git rebase --preserve-merges --interactive कोशिश कर सकते हैं, (धन्यवाद इस विफलता मोड ओर इशारा करते हुए के लिए Abizern के लिए):

-p 
--preserve-merges 

इसके बजाय मर्ज के अनदेखी की, उन्हें फिर से बनाना की कोशिश करो।

आदमी पेज से बग खंड शामिल हैं:

कार्य करने --preserve-merges --interactive द्वारा प्रस्तुत संशोधन ग्राफ के टोपोलॉजी का प्रतिनिधित्व नहीं करता सूची।
संपादन करना और उनके प्रतिबद्ध संदेशों को पुनः रिकॉर्ड करना ठीक काम करना चाहिए, लेकिन प्रतिबद्धताओं को पुन: व्यवस्थित करने का प्रयास प्रतिबिंबित परिणाम उत्पन्न करता है।


jthill के comment का वर्णन के रूप में (-p के बाद से बेहतर मर्ज के सुरक्षित करेगा अगर संघर्ष संकल्प रिकॉर्डर थे):

आप कर सकते हैं पूर्वव्यापी प्रभाव से किसी मर्ज के लिए प्रकाश rerere:

git config rerere.enabled true 
git checkout $merge^1 
git merge $merge^2 
git read-tree --reset -u $merge 
git commit -m- 
git checkout @{-1} 
+0

धन्यवाद @ वीओएनसी, लेकिन दुख की बात है, यह मेरे लिए काम नहीं किया। मैंने टेस्ट प्रतिबद्धता को दोबारा लिखा, 'विलय को उठाया', और फिर भी विलय पर दबा दिया, 11 विरोधाभासी फाइलों को फेंक दिया। मैंने @ क्रिस्क के 'गिट रीसेट' सुझाव का उपयोग किया है जहां मैं था, और मुझे लगता है कि मैं इसे वहां छोड़ दूंगा: निवेश का समय इस मामले में ठीक नहीं है। – ChrisWard

+0

@ChrisWard इसका मतलब है कि मर्ज रिज़ॉल्यूशन रिकॉर्ड करने के लिए आपको 'rerere' (http://git-scm.com/docs/git-rerere) को सक्रिय करने की आवश्यकता होगी, जो * फिर * रीबेज' --preserve की अनुमति देगा संघर्ष के बिना -मेज '। – VonC

+0

अब मैंने 'rerere' चालू कर दिया है, और फिर से' रीबेज 'की कोशिश की है। जब 'रीबेज' विलय प्रतिबद्धता में आता है, तो मैं पूर्व-छवियों को रिकॉर्ड करने के लिए 'rerere' देख सकता हूं, और उसके बाद मर्ज विवादों में बारिश हो रही है। मुझे लगता है कि यह ऐसा कर रहा है क्योंकि जब मैं' rerere' चालू नहीं हुआ था तब मैं चालू नहीं हुआ था ' मूल संघर्ष संकल्प किए, इसलिए यह इस बात से अवगत नहीं है कि मैंने मुद्दों को कैसे हल किया। क्या पहले से ही हल किए गए प्रतिबद्धता से उस डेटा को प्राप्त करने में सक्षम होना चाहिए? – ChrisWard

-3

यदि और केवल यदि आपके सहकर्मियों ने कहीं और f3e71c2 के परिवर्तनों को धक्का नहीं दिया है, तो यह काम करेगा। अन्यथा मुझे नहीं पता कि क्या होगा। प्रतिबद्ध संदेश बदलना पूरी तरह से कॉस्मेटिक (== मेटाडाटा परिवर्तन) है, यह देखते हुए कि आपने push को उस प्रतिबद्धता को संपादित नहीं किया है जिसे आप अभी तक संशोधित करना चाहते हैं, लेकिन फिर भी इतिहास के भ्रम के परिणामस्वरूप इतिहास के किसी भी हिस्से को धक्का दिया जा सकता है जो इसके ऊपर है।

+2

संदेश प्रतिबद्ध वस्तु का हिस्सा है, जो अपरिवर्तनीय है।अगर आप संदेश बदलते हैं, तो आपने प्रतिबद्धता बदल दी है, जो इतिहास बदलती है। – Abizern

+0

@Abizern: यह सच है। हालांकि यह केवल तभी प्रासंगिक है जब काम पहले ही कहीं और धकेल दिया गया हो (वे नहीं हैं)। मैंने स्थानीय रूप से सत्यापित किया है कि इस रणनीति में इस रणनीति का काम करता है। – kampu

+0

@Abizern: हालांकि मुझे लगता है कि मैंने नहीं सोचा था कि इस दौरान अन्य लोग पहले से ही शीर्ष पर चल रहे थे। इससे शायद विफलता/इतिहास भ्रम पैदा हो जाएगा, इसलिए मैंने तदनुसार संपादित किया है। – kampu

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