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.

227
demandé sur DavidRR 2012-09-05 10:53:44

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
375
répondu Amber 2015-01-09 20:05:27

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
41
répondu NemoXP 2014-04-22 16:53:54

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.

27
répondu Adam Dymitruk 2012-09-05 07:02:43

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

La version à jour du script

1
répondu moldcraft 2017-07-13 12:26:36