2012-03-07 15 views
48

जैसा कि शीर्षक कहता है, मैं git merge --squash और git merge --no-commit के बीच अंतरों के बारे में वास्तव में स्पष्ट नहीं हूं।गिट मर्ज के बीच मतभेद - स्क्वैश और --no-commit

जहां तक ​​मैं git merge के लिए सहायता पृष्ठ को समझता हूं, दोनों आदेश मुझे एक अद्यतन कार्यरत पेड़ में छोड़ देंगे, जहां इसे संपादित करना अभी भी संभव है और फिर अंतिम प्रतिबद्धता (या एकाधिक प्रतिबद्धता) करने के लिए।

क्या कोई उन 2 विकल्पों के अंतर को स्पष्ट कर सकता है? मैं दूसरे के बजाय एक का उपयोग कब करूंगा?

उत्तर

65
git merge --no-commit 

यह सामान्य विलय की तरह है लेकिन विलय-प्रतिबद्धता नहीं बनाता है। यह प्रतिबद्धता एक विलय प्रतिबद्ध होगी: जब आप इतिहास को देखेंगे, तो आपकी प्रतिबद्धता सामान्य विलय के रूप में दिखाई देगी।

git merge --squash 

यह विलय प्रतिबद्धता के बिना आपके काम करने वाले पेड़ में परिवर्तनों को विलय करेगा। जब आप मर्ज किए गए परिवर्तन करते हैं, तो यह आपकी शाखा पर एक नई "सामान्य" प्रतिबद्धता की तरह दिखेगा: इतिहास में विलय प्रतिबद्धता के बिना। यह लगभग है जैसे आपने सभी विलय किए गए परिवर्तनों पर चेरी-पिक किया था।

+0

तो विलय-प्रतिबद्धता इतिहास में कैसे दिखाई देगी? चूंकि मैं प्रतिबद्धता संदेश संपादित कर सकता हूं, मैं कैसे देख सकता हूं कि यह एक विलय-प्रतिबद्ध था? – quaylar

+2

@quaylar एक मर्ज-प्रतिबद्ध वास्तव में एक विशेष प्रतिबद्धता नहीं है, सिवाय इसके कि इसमें कई माता-पिता हैं। आप अभिभावकों को 'गिट लॉग - पारेन्ट्स' (और 'गिट लॉग - मेर्गेस' के साथ उदाहरण के लिए प्रतिबद्धता के लिए देख सकते हैं)। –

+5

@ फिलिपवेन्डलर तो अनिवार्य रूप से: विलय-प्रतिबद्ध होने के बाद मैं हमेशा इतिहास को देखकर जानता हूं कि यह प्रतिबद्धता विलय का परिणाम था (क्या वह जानकारी है जो इस विलय में योगदान देने वाली शाखाओं को भी रखा गया है?)। - स्क्वैश का उपयोग करने का कोई तरीका नहीं है कि यह प्रतिबद्धता विलय का परिणाम था। क्या मैं इसे सही ढंग से समझ रहा हूँ? – quaylar

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