दो गिट शाखाओं का सबसे हाल का सामान्य पूर्वज कैसे खोजें?
दो गिट शाखाओं का सबसे हाल का सामान्य पूर्वज कैसे खोजें?
जवाबों:
आप ढूंढ रहे हैं git merge-base। उपयोग:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
git log master...HEAD
--octopusसही परिणाम प्राप्त करने के लिए ध्वज को पारित करने की आवश्यकता है । स्पष्ट-लेकिन-गलत git merge-base branch1 branch2 branch3आपको एक वचन देगा, लेकिन, जैसा कि डॉक्स में चर्चा अनुभाग में वर्णित है, यह आवश्यक रूप से सभी तीन शाखाओं का एक सामान्य पूर्वज नहीं है।
git diff master...feature
आपके वर्तमान (संभवत: मल्टी-कमिट) सुविधा शाखा के सभी नए संचार दिखाता है।
man git-diff दस्तावेज़ जो:
git diff A...B
के समान है:
git diff $(git merge-base A B) B
लेकिन ...टाइप करना और याद रखना आसान है।
जैसा कि डेव ने उल्लेख किया है , विशेष मामले को HEADछोड़ा जा सकता है। इसलिए:
git diff master...HEAD
के समान है:
git diff master...
यदि वर्तमान शाखा है तो पर्याप्त है feature।
अंत में, याद रखें कि आदेश मायने रखता है! ऐसा करने git diff feature...masterसे परिवर्तन दिखाई देंगे जो चालू masterनहीं हैं feature।
मैं चाहता हूं कि अधिक git कमांड उस सिंटैक्स का समर्थन करेंगे, लेकिन मुझे नहीं लगता कि वे करते हैं। और कुछ के लिए अलग-अलग शब्दार्थ भी हैं ...: डबल कमिट ".." और ट्रिपल-डॉट "" के बीच अंतर क्या है?
git diff master...करने के विशेष मामले मेंHEAD
git diff origin/branchname...
जैसा कि एक पूर्व उत्तर में उल्लेख किया गया है, git merge-baseकाम करता है:
$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
लेकिन अगर myfeatureवर्तमान शाखा है, जैसा कि आम है, आप उपयोग कर सकते हैं --fork-point:
$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
यह तर्क केवल पर्याप्त रूप से हाल के संस्करणों में काम करता है। दुर्भाग्य से, यह हमेशा काम नहीं करता है, और यह स्पष्ट नहीं है कि क्यों। कृपया इस उत्तर के अंत में दी गई सीमाओं को देखें ।
पूर्ण जानकारी के लिए, विचार करें:
$ git log -1 $(git merge-base --fork-point develop)
git version 2.14.1.windows.1। git merge-base --fork-point branch2एक शाखा के साथ चल रहा है (अपने स्वयं के साथ) जो मुझे पता है कि वर्तमान शाखा git merge-base branch1 branch2से कांटा गया है , इससे कोई परिणाम नहीं मिलता है, जबकि सही ढंग से कांटा बिंदु दिखाता है। क्या समस्या हो सकती है?
branch2और फिर चलाएं git merge-base --fork-point branch1।
gitkयह देखने के लिए कि चित्र कैसा दिखता है , चित्रमय प्रतिबद्ध दर्शक, जैसे , आदि का उपयोग करें । शायद आपको अपना जवाब मिल जाएगा।
git merge-base branch1 branch2। लेकिन अजीब बात यह है कि --fork-pointकुछ भी नहीं देता है। क्या आपने पुष्टि की है कि यह आपके लिए काम करता है?
gitkआप दो शाखाओं को रेखांकन के साथ देख सकते हैं:
gitk branch1 branch2
और फिर दो शाखाओं के इतिहास में सामान्य पूर्वजों को खोजना आसान है।