दो गिट शाखाओं का सबसे हाल का सामान्य पूर्वज कैसे खोजें?
दो गिट शाखाओं का सबसे हाल का सामान्य पूर्वज कैसे खोजें?
जवाबों:
आप ढूंढ रहे हैं 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
और फिर दो शाखाओं के इतिहास में सामान्य पूर्वजों को खोजना आसान है।