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.


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

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

                         

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.


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


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;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.