2012-05-22 31 views
8

git branch -a --contains <hash> मुझे उन सभी शाखाओं को hash प्रदान करता है। मैं क्या चाहता हूं git branch -a --no-contains <hash> है। दुर्भाग्यवश, ऐसा करने के लिए कोई आदेश प्रतीत नहीं होता है, इसलिए मुझे लगता है कि समाधान कुछ ऐसा है:ऐसी शाखाएं दिखाएं जिनमें

git branch -a | grep -v output of(git branch -a --contains) लेकिन मेरा बैश कार्य तक नहीं है।

Show all branches that commit A is on and commit B is not on? लागू होने लगते हैं, लेकिन दृष्टिकोण आवश्यक से अधिक जटिल लगता है।

उपरोक्त को पूरा करने के लिए सबसे अच्छा/सबसे सरल तरीका क्या है?

+0

दृश्यता के लिए: ** 'गिन 2.13] में' --no-include' ध्वज जोड़ा गया था (https://github.com/git/git/blob/v2.13.0/Documentation/RelNotes/2.13.0 .txt) ** .. जैसा कि [मेरे उत्तर] में बताया गया है (https://stackoverflow.com/a/44687845/1667513)। – nonsensickle

उत्तर

11

grep में -F विकल्प है जो निश्चित स्ट्रिंग से मेल खाता है। आप जो कर रहे हैं उसके लिए उपयोगी होगा।

git branch -a | grep -vF "$(git branch -a --contains <hash>)" 

दुर्भाग्य से, -F को फ़िल्टर कर देगा शाखाओं के नाम एक आंशिक मैच है। एंटाक द्वारा सुझाए गए अनुसार, हम अधिक विश्वसनीय diff के लिए comm का उपयोग कर सकते हैं।

git branch -a | sort | comm -3 - <(git branch -a --contains <hash> | sort) 
+1

+1 यह चाल है। सरल और सटीक। – ralphtheninja

+0

हाँ, निश्चित रूप से। धन्यवाद! – kayaker243

+0

ध्यान दें कि इससे शाखाओं को गलत तरीके से छुपाया जाएगा जो आंशिक रूप से शाखाओं के नाम से मेल खाते हैं जिनमें कहा गया है। जैसे 'echo -e "aaa \ nbbb" | grep -vF "$ (echo aa)" ' – antak

2

के बाद से स्वीकार किए जाते हैं जवाब afoul चलाने जाएगा यदि शाखा नामों आंशिक रूप से मेल खाते हैं, यहाँ एक है कि इस situtuation संभालती है।

git branch -a | comm -3 - <(git branch -a --contains <hash>) 

| sort दोनों आदेशों के अंत में जोड़ा जा सकता है अगर comm: file 1 is not in sorted order चेतावनी आप परेशान। हालांकि, सही परिणाम प्राप्त करने के लिए यह आवश्यक नहीं है क्योंकि दो इनपुटों का क्रम बराबर है।