Encontrar ramificações Git não imersas?

276

Eu tenho um repositório Git com muitos ramos, alguns deles já mesclados e outros não. Como o número de ramificações é bastante grande, como posso determinar quais ramificações ainda não foram mescladas? Eu gostaria de evitar ter que fazer uma "polvo" mesclar e re-mesclar ramificações que já foram mescladas.

fluca1978
fonte
1
Primeiro, eu estava rindo do termo "fusão de polvos". Mas, caso você não saiba, como eu: esse é o nome oficial de uma estratégia de mesclagem :-) Consulte git-scm.com/docs/git-merge ou atlassian.com/de/git/tutorials/using-branches/ merge-strategy
observator

Respostas:

462

Tente o seguinte:

git branch --merged master

Ele faz o que diz na lata (lista os ramos que foram incorporados master). Você também pode puxar o inverso com:

git branch --no-merged master

Se você não especificar master, por exemplo ..

git branch --merged

em seguida, ele mostrará os ramos que foram mesclados com o atual HEAD(por isso, se você estiver ativado master, é equivalente ao primeiro comando; se estiver ativo foo, será equivalente a git branch --merged foo).

Você também pode comparar ramificações upstream especificando o -rsinalizador e um ref para verificação, que pode ser local ou remota:

git branch -r --no-merged origin/master
Âmbar
fonte
5
Se você mesclar fooem master, ele aparecerá na git branch --merged masterlista. Mas o que acontece se você se comprometer mais uma vez foo? Ele não aparece mais nessa lista ou, como se tivesse novos commit, foi em um ponto mesclado master?
Craig Otis
11
@CraigOtis Não aparecerá mais na lista. --mergedlista apenas ramificações que são completamente mescladas na ramificação especificada.
21913 Amber
e gitk --remotes --not origin/mastermostrará os commits em cada ramo que não foram mesclados ao mestre.
yoyo
5
Imagine isso ... uma resposta git fácil de entender e usar!
Jleach #
1
Existe uma maneira de obter a lista sem verificar a ramificação? Como apontar para o servidor e obter a lista?
Xbmono 21/10/19
57

Você também pode usar o -rparâmetro para mostrar ramificações remotas que não foram mescladas no mestre:

git branch -r --merged master

git branch -r --no-merged

                         
NemoXP
fonte
19
ou -apara ver ao mesmo tempo remoto e local #
Simon Forsberg 11/11
1
Esse último deve ser git branch -r --no-mesclado?
MortimerCat
28

Se um ramo já estiver mesclado, mesclá-lo novamente não fará nada. Portanto, você não precisa se preocupar em "re-mesclar" ramificações que já foram mescladas.

Para responder sua pergunta, você pode simplesmente emitir

 git branch --merged

para ver os ramos mesclados ou

 git branch --no-merged

para ver os galhos imersos. Sua ramificação atual está implícita, mas você pode especificar outras ramificações, se desejar.

 git branch --no-merged integration

mostrará ramos que ainda não foram mesclados no integrationramo.

Adam Dymitruk
fonte
1

O script abaixo encontrará todos os origin/*ramos que estão à frente do ramo atual

#!/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

A versão atualizada do script

artesanato
fonte
0
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;
user3915489
fonte