जलमग्न गिट शाखाओं का पता लगाएं?


276

मेरे पास कई शाखाओं के साथ गिट रिपॉजिटरी है, उनमें से कुछ पहले से ही विलय और कुछ नहीं। चूंकि शाखाओं की संख्या काफी बड़ी है, इसलिए मैं कैसे निर्धारित कर सकता हूं कि कौन सी शाखाएं अभी तक विलय नहीं हुई हैं? मैं एक "ऑक्टोपस" मर्ज और फिर से विलय करने वाली शाखाओं को करने से बचना चाहूंगा जो पहले से ही विलय हो चुके हैं।


1
पहले मैं "ऑक्टोपस मर्ज" के शब्द के बारे में हंस रहा था। लेकिन अगर आप मुझे जानते नहीं हैं, तो: यह एक मर्ज रणनीति का आधिकारिक नाम है :-) देखें git-scm.com/docs/git-merge या atlassian.com/de/git/tutorials/use-branches/ मर्ज-रणनीति
पर्यवेक्षक

जवाबों:


462

इसे इस्तेमाल करे:

git branch --merged master

यह वह करता है जो टिन पर कहता है (उन शाखाओं को सूचीबद्ध करता है जिन्हें विलय कर दिया गया है master)। आप इसके साथ उलटा भी खींच सकते हैं:

git branch --no-merged master

यदि आप निर्दिष्ट नहीं करते हैं master, जैसे ..

git branch --merged

फिर यह आपको उन शाखाओं को दिखाएगा जिन्हें वर्तमान में मिला दिया गया है HEAD(इसलिए यदि आप चालू हैं master, तो यह पहली कमांड के बराबर है; यदि आप चालू हैं foo, तो यह बराबर है git branch --merged foo)।

आप -rझंडे और एक रेफरी के खिलाफ जांच करके अपस्ट्रीम शाखाओं की तुलना भी कर सकते हैं , जो स्थानीय या दूरस्थ हो सकती है:

git branch -r --no-merged origin/master

5
यदि आप मर्ज fooकरते हैं master, तो यह git branch --merged masterसूची में दिखाई देगा । लेकिन अगर आप एक बार और अपराध कर दें तो क्या होगा foo? क्या यह अब उस सूची में दिखाई नहीं देता है, या ऐसा नहीं है, भले ही इसमें नए कमिट हों, यह एक बिंदु पर विलय हो गया था master?
क्रेग ओटिस

11
@CraigOtis यह अब सूची में दिखाई नहीं देगा। --mergedकेवल उन शाखाओं को सूचीबद्ध करता है जो पूरी तरह से दिए गए शाखा में विलय हो जाती हैं।
अंबर

और gitk --remotes --not origin/masterआपको प्रत्येक शाखा पर उन कमिटों को दिखाएगा जिन्हें मास्टर में विलय नहीं किया गया है।
योय

5
इसकी कल्पना करें ... एक ऐसा उत्तर जो समझने और उपयोग करने में आसान हो!
jleach

1
क्या शाखा की जाँच के बिना सूची प्राप्त करने का कोई तरीका है? सर्वर की ओर इशारा करते हुए और फिर सूची प्राप्त करें?
xbmono

57

आप दूरस्थ शाखाओं को दिखाने के लिए -r पैरामीटर का भी उपयोग कर सकते हैं जिन्हें मास्टर में विलय नहीं किया गया था:

git branch -r --merged master

git branch -r --no-merged

19
या -aएक ही समय में दूरस्थ और स्थानीय दोनों को देखने के लिए
साइमन फोर्सबर्ग

1
कि पिछले एक git शाखा -r -no-विलय मास्टर होना चाहिए?
मोर्टिमरकैट

28

यदि पहले से ही एक शाखा का विलय हो जाता है, तो इसे फिर से विलय करना कुछ भी नहीं करेगा। इसलिए आपको "पुनः विलय" वाली शाखाओं के बारे में चिंतित होने की आवश्यकता नहीं है जो पहले से ही विलय हैं।

अपने प्रश्न का उत्तर देने के लिए, आप बस जारी कर सकते हैं

 git branch --merged

मर्ज की गई शाखाओं को देखने के लिए या

 git branch --no-merged

अनमैरिड शाखाओं को देखने के लिए। आपकी वर्तमान शाखा निहित है लेकिन आप चाहें तो अन्य शाखाओं को निर्दिष्ट कर सकते हैं।

 git branch --no-merged integration

उन शाखाओं को दिखाएगा जो अभी तक integrationशाखा में विलय नहीं हुई हैं ।


1

नीचे की स्क्रिप्ट में सभी origin/*शाखाएँ मिलेंगी जो वर्तमान शाखा से आगे हैं

#!/bin/bash

CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)

echo -e "Current branch: \e[94m$CURRENT_BRANCH\e[0m"
echo ''

git branch -a | grep remotes/origin/ | while read LINE
do
    CMD="git diff --shortstat remotes/origin/${CURRENT_BRANCH}...${LINE}"

    if $CMD | grep ' file' > /dev/null; then
        echo -e "\e[93m$LINE\e[0m" | sed 's/remotes\/origin\///'
        $CMD
        echo ''
    fi
done

स्क्रिप्ट का अप-टू-डेट संस्करण


0
Below script will fetch you unmerged branches and write results in .xls file 
#!/usr/bin/env bash
echo "getting list of unmerged_branches from the remote"
file_name=unmerged_branches.xls`enter code here`
current_time=$(date "+%Y.%m.%d-%H.%M.%S")
for branch in `git branch -r --no-merged | grep -v HEAD`;
do echo -e `git show --format="%cd  \\t%cr  \\t%ae" $branch | head -n 1` \\t$branch; 
done | sort -r >> $current_time.$file_name
echo "result is writtein in ";
echo $current_time.$file_name;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.