Trova rami Git non uniti?


276

Ho un repository Git con molti rami, alcuni già uniti e altri no. Poiché il numero di filiali è piuttosto elevato, come posso determinare quali filiali non sono state ancora unite? Vorrei evitare di dover fare una fusione "polpo" e ricongiungere i rami che sono già stati uniti.


1
Per prima cosa stavo ridendo del termine di "fusione di polpo". Ma nel caso non lo sapessi, come me: questo è il nome ufficiale di una strategia di unione :-) Vedi git-scm.com/docs/git-merge o atlassian.com/de/git/tutorials/using-branches/ merge-strategy
osservatore

Risposte:


463

Prova questo:

git branch --merged master

Fa quello che dice sulla scatola (elenca i rami in cui sono stati uniti master). Puoi anche sollevare l'inverso con:

git branch --no-merged master

Se non si specifica master, ad es.

git branch --merged

quindi ti mostrerà i rami che sono stati uniti nella corrente HEAD(quindi se sei attivo master, è equivalente al primo comando; se sei attivo foo, è equivalente a git branch --merged foo).

Puoi anche confrontare i rami a monte specificando la -rbandiera e un riferimento da verificare, che può essere locale o remoto:

git branch -r --no-merged origin/master

5
Se ti unisci fooin master, apparirà git branch --merged masternell'elenco. Ma cosa succede se ti impegni ancora una volta foo? Non appare più in quell'elenco o, come se avesse nuovi commit, è stato a un certo punto unito master?
Craig Otis,

11
@CraigOtis Non verrà più visualizzato nell'elenco. --mergedelenca solo i rami che sono completamente uniti nel ramo dato.
Ambra

e gitk --remotes --not origin/masterti mostrerà i commit su ogni ramo che non sono stati uniti al master.
yoyo

5
Immagina questo ... una risposta git che sia facile da capire e da usare!
jleach,

1
C'è un modo per ottenere l'elenco senza controllare la filiale? Come puntare al server e quindi ottenere l'elenco?
xbmono,

57

È inoltre possibile utilizzare il -rparametro per mostrare i rami remoti che non sono stati uniti in master:

git branch -r --merged master

git branch -r --no-merged

                         

19
o -aper vedere sia remoti che locali allo stesso tempo
Simon Forsberg,

1
Quest'ultimo dovrebbe essere git branch -r --no-master unito?
Mortimer

28

Se un ramo è già unito, unirlo nuovamente non farà nulla. Quindi non devi preoccuparti di "ricongiungere" rami già uniti.

Per rispondere alla tua domanda, puoi semplicemente emettere

 git branch --merged

per vedere i rami uniti o

 git branch --no-merged

per vedere i rami non uniti. Il tuo ramo attuale è implicito ma puoi specificare altri rami se lo desideri.

 git branch --no-merged integration

ti mostrerà i rami che non sono ancora stati uniti nel integrationramo.


1

Lo script seguente troverà tutti i origin/*rami che sono davanti al ramo corrente

#!/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 versione aggiornata dello 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;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.