J'ai un référentiel Git avec de nombreuses branches, certaines déjà fusionnées et d'autres non. Comme le nombre de branches est assez important, comment puis-je déterminer quelles branches n'ont pas encore été fusionnées? Je voudrais éviter de faire une fusion de "pieuvres" et de re-fusionner des branches qui ont déjà été fusionnées.
Essaye ça:
git branch --merged master
Il fait ce qui est écrit sur l’étain (liste les branches qui ont été fusionnées dans master
). Vous pouvez également afficher l'inverse avec:
git branch --no-merged master
Si vous ne spécifiez pas master
, par exemple ...
git branch --merged
vous verrez alors les branches qui ont été fusionnées dans la HEAD
courante (donc si vous êtes sur master
, cela équivaut à la première commande; si vous êtes sur foo
, c’est équivalent à git branch --merged foo
).
Vous pouvez également comparer les branches en amont en spécifiant l'indicateur -r
et une référence à vérifier, qui peuvent être locales ou distantes:
git branch -r --no-merged Origin/master
Vous pouvez également utiliser le paramètre -r pour afficher les branches distantes non fusionnées dans le maître:
git branch -r --merged master
git branch -r --no-merged
Si une branche est déjà fusionnée, une nouvelle fusion ne fera rien. Vous n'avez donc pas à vous inquiéter de la "re-fusion" de branches déjà fusionnées.
Pour répondre à votre question, vous pouvez simplement émettre
git branch --merged
pour voir les branches fusionnées ou
git branch --no-merged
pour voir les branches non fusionnées. Votre branche actuelle est implicite, mais vous pouvez spécifier d'autres branches si vous le souhaitez.
git branch --no-merged integration
vous montrera les branches qui ne sont pas encore fusionnées dans integration
branche.
Le script ci-dessous trouvera toutes les branches Origin/*
qui sont en avance sur la branche actuelle.
#!/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;