2011-01-25 9 views
5

क्या दो शाखाओं के लिए आम प्रतिबद्धता की पहचान करने के लिए कोई शॉर्टेंड है? उदाहरण के लिए गुरु से बंद विभाजन topic1 अगर मैं मास्टर और फिर, और वे दोनोंगिट दो शाखाओं के सबसे हालिया चौराहे की पहचान

 
master: 
a------b------c------d 
     \ 
topic1: r------s------t 

वहाँ कहना b पहचान करने के लिए एक रास्ता है जारी रखें?
उदाहरण के लिए यदि मास्टर # विषय 1 (विषय 1 # मास्टर के समान) जैसी कोई चीज़ थी, जिसका अर्थ है, "मास्टर और विषय दोनों द्वारा साझा की गई सबसे हालिया प्रतिबद्धता।"

मैं करने में सक्षम होना चाहते हैं:

$ git checkout topic1 
$ git diff master#topic1..topic1

मुझे पता है कि मैं कर सकते हैं:

git diff master..topic

लेकिन मुझे परवाह नहीं है c और d करता है के बारे में।

उत्तर

7

सवाल आप वास्तव में पूछ रहे हैं का जवाब:

git diff master...topic 

नोट तीन डॉट्स।

मैनपेज से:

git diff [--options] <commit>...<commit> [--] [<path>...]

यह फार्म, दूसरे के लिए युक्त शाखा पर और ऊपर परिवर्तन देखने के लिए दोनों <commit> की एक आम पूर्वज से शुरू है। git diff A...Bgit diff $(git merge-base A B) B के बराबर है। आप <commit> में से किसी एक को छोड़ सकते हैं, जिसकी बजाय HEAD का उपयोग करने के समान प्रभाव पड़ता है।

5

git merge-base का उपयोग करें।

NAME 
git-merge-base - Find as good common ancestors as possible for a merge 

SYNOPSIS 
git merge-base [-a|--all] [--octopus] <commit> <commit>… 
git merge-base --independent <commit>… 
+0

ठंडा थाक्स! मेरी इच्छा है कि इसे व्यक्त करने के लिए एक शॉर्टेंड था। – jpswain

+1

@orange: आपके उपयोग के मामले में है! मेरा जवाब देखें – Cascabel

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