web-dev-qa-db-fra.com

Trouver des branches Git non fusionnées?

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.

256
fluca1978

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
424
Amber

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
50
NemoXP

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.

28
Adam Dymitruk

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
moldcraft
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;
0
user3915489