2012-05-09 17 views
8

किसी को दो शाखाओं के बीच पिछली विलय प्रतिबद्धता कैसे मिल सकती है?पिछले विलय प्रतिबद्धता को कैसे ढूंढें

मैं पिछली बार मैं मास्टर शाखा में रिलीज शाखा विलय कर दिया है के बाद से मेरे मालिक शाखा में परिवर्तन देखने के लिए चाहते हैं। पिछली शाखा के बाद रिलीज शाखा में हुए बदलावों को देखने के लिए, git diff ...release

पर स्पष्ट रूप से git diff release... काम नहीं करता है क्योंकि इसमें अंतिम विलय से पहले सभी बदलाव भी शामिल हैं। इस प्रकार मैं मैं पिछले मर्ज की आईडी प्रतिबद्ध जरूरत के लिए git diff

git log --reverse --ancestry-path `git merge-base HEAD release`.. \ 
     --format=format:%H|head -n1 

काम करने के लिए और git diff $(...) साथ इस्तेमाल किया जा सकता लगता है इसे पारित करने लगता है, लेकिन यह बहुत जटिल लगता है। क्या कोई आसान समाधान है?

उदाहरण

I 
/\ 
A1 B1 
\ | 
| M 
| | 
A2 B2 

यहाँ I प्रारंभिक प्रतिबद्ध है। A[12] रिलीज है और B[12] मास्टर काम करता है। M पिछली प्रतिबद्धता है। उदाहरण में अंतिम विलय और मास्टर के बीच परिवर्तन केवल बी 2 द्वारा किए गए परिवर्तन हैं। git merge-base A2 B2 रिटर्न A 1. और git diff B2 A1B1 के परिवर्तन शामिल हैं। इस प्रकार प्रश्न तो यह है कि एक मैन्युअल M लगाने के लिए बिना git diff M B2 चला सकते हैं सामान्य और अधिक जटिल मामले में एम लगाने के लिए कैसे है।

+0

यह सबसे कारगर तरीका नहीं है, लेकिन आप लॉग --graph --oneline' प्रतिबद्ध लगाने के लिए 'Git देख सकते हैं। – Shahbaz

उत्तर

-1

यह नवीनतम मर्ज शाखा foo और शाखा गुरु के बीच प्रतिबद्ध दिखाएगा

git log foo master --oneline --date-order --merges -1 

--oneline is just to keep the output short 
--date-order to get the latest first 
--merges to only show merge commits 
-1 to display the first result only 
+3

यह आदेश मुझे किसी भी शाखा में अंतिम विलय देने लगता है। इसमें कुछ अन्य चीज़ों के साथ मास्टर या फू का विलय शामिल है। लेकिन मैं मास्टर के साथ foo का अंतिम विलय किसी अन्य चीज़ के साथ नहीं करना चाहता हूं। Git लॉग मास्टर --oneline [...] –

+0

यह आदेश एक शाखा से पिछले मर्ज प्राप्त करने के लिए उपयोगी है खुद समस्या को हल नहीं कर रहा है। –

6

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

git merge-base master release आपके मास्टर के सबसे हालिया आम पूर्वज और रिलीज शाखाएं (यानी आखिरी प्रतिबद्धता है कि दोनों में आम है)।

फिर, मास्टर पर आप सामान्य पूर्वजों के बाद से किए गए परिवर्तनों को देखने के लिए git diff [common ancestor] HEAD का उपयोग कर सकते हैं।

+0

मैं सवाल का एक उदाहरण जोड़ लिया है दिखाने के लिए क्यों 'Git मर्ज-base': यदि आप केवल एक शाखा लोग इन –

+0

@ रोलैंड शुल्ज़ मैं समझता हूं। मैं एक अलग जवाब के साथ आने की कोशिश करूंगा –

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