Trouver des branches git non fusionnées?
J'ai un dépôt Git avec beaucoup de branches, certaines d'entre elles ont déjà fusionné et d'autres non. Puisque le nombre de branches est assez important, Comment puis-je déterminer quelles branches n'ont pas encore été fusionnées? Je voudrais éviter d'avoir à faire une fusion "octopus" et à re-fusionner des branches qui ont déjà été fusionnées.
4 réponses
, Essayez ceci:
git branch --merged master
Il fait ce qu'il dit sur le tin (liste les branches qui ont été fusionnées en master
). Vous pouvez également tirer vers le haut l'inverse avec:
git branch --no-merged master
Si vous ne spécifiez pas master
, par exemple..
git branch --merged
, Puis il va vous montrer les branches qui ont été fusionnées dans le courant HEAD
(donc si vous êtes sur master
, c'est l'équivalent de 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 -r
flag et une référence à vérifier, qui peut être locale ou distante:
git branch -r --no-merged origin/master
Vous pouvez également utiliser le paramètre-r pour afficher les branches distantes qui n'ont pas été fusionnées en maître:
git branch -r --merged master
git branch -r --no-merged
Si une branche est déjà fusionnée, la fusionner à nouveau ne fera rien. Vous n'avez donc pas à vous inquiéter de la "re-fusion" des 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 courante 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 la branche integration
.
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