2013-09-27 5 views
7

से पता चलता मान लिया जाये कि आप इस है:--squash मर्ज git कैसे इतना है कि GitHub "नेटवर्क" आरेख मर्ज

 master: o--o--o 
development:  `o--o--o 

मैं परिवर्तन वापस मर्ज करने के लिए एक प्रतिबद्ध के रूप में (परहेज सब कबाड़ के साथ करता है चाहता हूँ जिस तरह से):

git checkout master 
git merge --squash development 

लेकिन तब GitHub नेटवर्क पेज यह दिखाता है:

 master: o--o--o---------o 
development:  `o--o--o 

क्या आप करने वाले हैं ,

git merge --no-ff 
git branch -d development 

master: o--o--o---------o 
       `o--o--o’ 

आप किसी मर्ज के लिए प्रतिबद्ध बनाने के लिए Git बता भले ही विलय कर दिया:

 master: o--o--o---------o 
development:  `o--o--o’ 
+0

आपको 'git merge --no-ff' का उपयोग करके अंतिम ग्राफ मिलता है। लेकिन ध्यान दें कि "जंक काम करता है" अभी भी वहां हैं। –

+0

यह भी ध्यान देने योग्य है कि "स्क्वैश विलय" एक वास्तविक विलय नहीं है (जैसा कि आपका इतिहास आपको दिखाता है); यह वास्तव में "स्क्वैश रिबेस" का अधिक है। आपको 'विकास' पहले (** पुनर्लेखन इतिहास **) को स्क्वैश करके और वास्तव में परिणाम को मास्टर में विलय करके, वास्तव में आप जो चाहते हैं उसे प्राप्त करेंगे। –

उत्तर

9

पिछले ग्राफ के लिए, आप निम्न आदेश का उपयोग कर सकते हैं: यह पता चलता है कि आप उम्मीद करेंगे क्या, यानी ऐसा शाखा तेजी से आगे है, यानी मास्टर की आखिरी प्रतिबद्धता विलय वाली शाखा का प्रत्यक्ष पूर्वज है।

ध्यान दें कि "जंक काम करता है" को हटाया नहीं जाएगा, लेकिन जब तक आपके पास वास्तव में कोई अच्छा कारण न हो, तो आपको अपना इतिहास इस तरह से रखना चाहिए। स्क्वैशिंग काम करता है आपके इतिहास को ब्राउज़ करना मुश्किल बनाता है।

यदि आपको लगता है कि आपका विकास शाखा इतिहास बकवास से भरा है, तो आप एक इंटरैक्टिव रीबेस का उपयोग करके विलय से पहले इसे फिर से लिख सकते हैं।

git checkout developement 
git rebase -i master 

आप लेने के लिए, संपादित करने, स्क्वैश, या करता त्यागने और अपनी शाखा इतिहास को फिर से लिखने में सक्षम हो जाएगा। एक बार ऐसा करने के बाद, क्लासिक विलय का उपयोग करें (बिना या बिना --no-ff, जैसा आप चाहें)।

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