2012-10-19 18 views
6

मेरे पास दो शाखाएं स्वतंत्र थीं। मैंने उन पर एक महीने से अधिक विभिन्न बिंदुओं पर काम किया। मैं नारंगी की जांच करके और git merge --no-ff apple कर रहा हूं और सब कुछ ठीक हो गया है (मैं इसे apple पर कॉल करें) को चलो (चलो इसे orange पर कॉल करें) और सब कुछ ठीक हो गया। गिट में मैं स्पष्ट रूप से उन शाखाओं को देख सकता था जिनके प्रत्येक का अपना इतिहास था और यह नारंगी पर एक विलय प्रतिबद्धता में एक साथ विलय हो गया था।गिट - रिबेस रेजिन विलय

बाद में मुझे एहसास हुआ कि नारंगी में एक प्रतिबद्धता गलत है, निर्माण प्रक्रिया में कोई गलती है, और मुझे नारंगी पर उस प्रारंभिक प्रतिबद्धता को संपादित करना होगा। मैं git rebase -i HEAD~19 का उपयोग करता हूं, प्रतिबद्धता चुनें और pick से edit बदलें। तो मैं प्रतिबद्धता संपादित करता हूं और सबकुछ ठीक है, और मैं रिबेस समाप्त करता हूं। मैं वापस गिटक में जाता हूं और दोनों शाखाओं का इतिहास नारंगी पर एक रैखिक इतिहास है।

तो क्या मैंने कुछ खींचा या क्या यह ऐसा माना जाता है? मैंने ग्रिट रीफ्लॉग का उपयोग तब किया जब मैंने विलय किया, फिर मैंने नारंगी पर विलय से पहले ठीक से वापस जाने के लिए एक और रीसेट किया, फिर मैंने रिबेज किया और प्रतिबद्ध किया कि उसके बाद मैंने विलय किया। अब सबकुछ दिखता है जिस तरह से मैं अपेक्षा करता हूं कि शाखाओं से काम करने के लिए एक साथ अंतःस्थापित नहीं किया जाता है।

भविष्य के संदर्भ के लिए कोई मुझे बता सकता है कि मैं एक शाखा में काम कैसे कर सकता हूं जहां मैं एक और शाखा में विलय कर चुका हूं, बिना अंतःस्थापित समितियों (रैखिक इतिहास) के समाप्त होने के बिना?

यदि मेरी शब्दावली सही नहीं है तो इसे संपादित करने में संकोच न करें। धन्यवाद फिर से

+0

मुझे 'gitk' नहीं पता है, लेकिन 'gitg' में मेरे पास शाखाएं चुनने का विकल्प है, क्या आपने सभी स्थानीय शाखाओं की तरह कुछ चुना है? –

+0

शायद रिश्तेदार 'HEAD ~ 19' के बजाय प्रतिबद्ध आईडी पर रीबेस करें? – nneonneo

+1

ध्यान दें कि गिट 1.8.5 'पुल --rebase'] पर विलय को संरक्षित रखने के लिए एक साफ तरीका पेश करेगा (http://stackoverflow.com/a/18756102/6309) – VonC

उत्तर

9

यह पुन: विश्राम का व्यवहार होने की उम्मीद है। यह प्रभावी रूप से शाखा के इतिहास को फिर से लिखता है, और इससे सीधी, सरलीकृत शाखा छोड़कर विलय (अन्य) विलय और अन्य मेटा-डेटा खो जाता है।

आप

git rebase --preserve-merges 

का उपयोग करके आपस में विलय की रक्षा कर सकते लेकिन वहाँ --interactive साथ --preserve-merges के संयोजन के साथ कुछ मुद्दों कर रहे हैं। सावधानी से चलना।

+1

दिलचस्प है, लेकिन इसमें कोई कमी है: http://marc.info/?l=git&m=129382385207873 – VonC

+0

हाँ, यही मेरा मतलब है '-i'। '-i' ==' - इंटरैक्टिव'। मुझे लगता है कि मुद्दा यह है कि कभी-कभी एक पुन: व्यवस्थित इतिहास डेटा को तोड़ने के बिना मर्ज इतिहास में सही ढंग से शामिल नहीं हो सकता है। – willoller

+1

मुझे पता है कि '-i' क्या खड़ा है, और मेरा बिंदु यह उल्लेख करने के लिए था कि, '--preserve-merge' के साथ संयुक्त होने पर, यह स्वचालित रूप से ज्ञात संघर्षों को हल नहीं करता है। – VonC

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