सामान्य समस्या: प्रतिबद्धताओं के एक समूह को देखते हुए, मैं उन सभी कामों की सूची कैसे प्राप्त करूं जो सभी पूर्वजों के रूप में या संबंधित रूप से पहले प्रतिबद्ध हैं, जिनमें सभी शामिल हैं वे काम करता है।गिट प्रतिबद्धताएं खोजें जिनमें कई विशिष्ट प्रतिबद्धताएं हैं
मैं शाखाओं (इसी तरह टैग) कि शाखाओं कि सेट में सभी प्रतिबद्ध के लिए git branch --contains <commit>
द्वारा दिया जाता है की तलाश द्वारा प्रतिबद्ध होते हैं पा सकते हैं, लेकिन git rev-list
एक --contains
विकल्प नहीं है। प्रभावी रूप से, मैं तर्क git rev-list
के साथ नियमित के साथ संयोजन करने का एक तरीका ढूंढ रहा हूं, और आउटपुट को सीमित करता है जिसमें सभी सूचीबद्ध काम करता है, उनमें से कोई भी नहीं (जो --contains
सामान्य रूप से काम करता है)।
विशिष्ट उदाहरण: को देखते हुए करता है a
, b
, c
, मैं कैसे पा सकते हैं पहले प्रतिबद्ध है कि इसके वंश में सभी तीन करता है?
उदाहरण के लिए, नीचे दिए गए पेड़ को देखते हुए, मैं एक्स को चिह्नित चिह्नित कैसे पा सकता हूं?
* (master)
|
X
|\
a *
| |
b c
|/
*
|
*
मैं वहाँ कुछ जादू मैं git rev-list
साथ कर सकते हैं, और संभवतः <commit1>...<commit2>
अंकन शामिल है मान लेते हैं, लेकिन मैं उस से आगे काम नहीं कर सकते हैं।
मैं एक आसान (कुशल) तरीका यह है के बारे में सोच नहीं सकते हैं, सभी की सूची तैयार की कमी विलय करता है, और हर एक का परीक्षण व्यक्तिगत रूप से यह देखने के लिए कि प्रश्न में से प्रत्येक कार्य वहां से पहुंच योग्य है या नहीं। अपेक्षाकृत आसानी से लिपि जा सकता है, लेकिन यह * धीमा * होगा। मुझे लगता है कि 'गिट' के हालिया (यानी 1.8+) संस्करण ने कुछ स्थानों में '--contains' विकल्प जोड़ा जो इससे थोड़ा आसान हो सकता है। – twalberg
क्या बी और सी विभिन्न शाखाओं से संबंधित हैं? – ShadyKiller
@ShadyKiller: विशिष्ट उदाहरण में, हाँ; सामान्य में, नहीं। सभी तीन एक ही शाखा में हो सकते हैं (जिस स्थिति में उत्तर केवल जो भी प्रतिबद्ध होगा वह नवीनतम होगा), या विभिन्न शाखाएं। नरक, तीन से कम या कम हो सकता है; वह एक अपेक्षाकृत मनमाना संख्या थी। –