Am un repozitoriu pe Git, care are foarte multe ramuri (branch-uri). Pentru că numărul de ramuri este foarte mare, aș dori cu un prorgam să le găsesc pe toate care sunt cu statusul: unmerged.
Ați putea să încercați așa:
git branch --merged master
Această comandă afișează într-un tabel lista de branch-uri care au fost împreunate cu master. Este și varianta inversă:
git branch --no-merged master
Puteți și să nu specificați branch-ul master
git branch --merged
în acest caz, comanda va afișa toate ramurile care au fost conectate la "HEAD"(deci, dacă ești acum pe ramura master, este echivalentă cu prima comanda; dacă ești pe branch-ul foo
, folosește așa o comandă git branch --merged foo
).
Dacă folosești flagul -r
poți să compari branch-urile:
git branch -r --no-merged origin/master
Dacă un branch (ramură) este deja fuzionată și încerci să o fuzionezi din nou, comenzile nu vor avea nici un efect. Așa că nu trebuie să îți faci griji pentru ramurile care deja au fost fuzionate.
Ca să dau un răspuns la întrebarea dumneavoastră, puteți să folosiți pur și simplu:
git branch --merged
sau
git branch --no-merged
Comenzile se execută default pe ramura curentă, dar dacă aveți nevoie puteți să specificați manual ramura:
git branch --no-merged integration
Această comandă va afișa ramurile care încă nu au fost fuzionate cu integration
.
Scriptul de mai jos va găsi toate ramurile care încă nu au fost fuzionate cu 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
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;