2015-12-14 26 views
8

Come posso sapere se un ramo (o commit) viene unito in SourceTree?Sourcetree: verifica se un ramo è unito

quando utilizza gitk --all, mostrerà un commit (o ramo) foo tutti gli altri rami, dove foo è già incorporata in.

Per chiarire cosa intendo uno screenshot: L'area cerchiata (rossa) mostra tutti i rami di cui fa parte il commit corrente. Può essere visualizzato anche in SourceTree?

Screenshot of gitk

+0

Quindi conosci un metodo da riga di comando per trovarlo, ma vuoi trovare un modo per farlo in Sourcetree in particolare? Non penso che abbia questa caratteristica. – tom

+0

Sì! (Beh, gitk è in realtà il git gui integrato, ma sembra inferiore a sourcetree se non in questo aspetto ...) –

risposta

7

But maybe it is easier after all to not use SourceTree for that feature

È possibile utilizzare un'azione personalizzata definito SourceTree e messa in vendita di quei rami unite.
Non è così integrato come gitk, ma almeno non è necessario cambiare strumento.

prima definire un custom action, using $SHA for getting the selected commit:

Custom action

Dovrebbe chiamare uno script nella vostra %PATH% chiamato git-bm (vedi this answer as an example)

#!/bin/sh 
for branch in $(git for-each-ref --format="%(refname:short)" refs/heads/); do 
    if [ "${branch}" != "$1" ]; then 
    t=$(git for-each-ref --format="%(refname:short)" --merged "${branch}" refs/heads/|grep -v "${branch}"|grep "$1") 
    if [ "${t}" != "" ]; then 
     echo "${branch}" 
    else 
     t=$(git branch --contains "$1" | grep "${branch}") 
     if [ "${t}" != "" ]; then 
     echo "${branch}"  
     fi 
    fi 
    fi 
done 

che elencherà tutti i settori da cui è possibile accedere al SHA1 corrente (ovvero "tutti i rami in cui è stato unito il ramo corrente")

(Nota: la sintassi git for-each-ref --merged è stata introdotta solo in git 2.7.0 - 4 gennaio 2016.Si veda ad esempio "Is it possible to filter out merged branches in git for-each-ref?")

Poi richiamare sul commit si desidera:

invoke custom action

E si arriva elenco delle filiali è stata fusa per incorporazione in:

list

È una soluzione, ma almeno non si lascia SourceTree.

+0

Purtroppo, ho scoperto che questo non funziona, dopo tutto. Voglio mostrare tutti i rami in cui questo ramo è unito, non il contrario. (Ad esempio, se unisco il ramo corrente in master, con la soluzione non verrà visualizzato "master" nell'elenco). Gitk lo fa correttamente ... –

+0

@ JanRüegg quindi qualcosa di simile (pseudo-sintassi): 'per ogni ramo: (git branch --merged abranch | grep currentBranch)' – VonC

+0

@ JanRüegg Ho modificato la risposta con uno script che dovrebbe elencare "tutti i rami di questo ramo sono uniti". Puoi testarlo? Funziona dalla mia parte. – VonC

7

L'equivalente di correre gitk --all in SourceTree sarebbe quella di scegliere tutti i rami dall'elenco a discesa in alto a sinistra:

View All Branches in SourceTree

Il grafico mostra che le filiali sono state unite dove, proprio come fa gitk.

Tuttavia, scoprendo esattamente cui rami sono stati fusi in quella attuale - cioè i rami i cui suggerimenti sono raggiungibile da HEAD - è più facilmente fatto da linea di comando, come si può semplicemente dire:

git branch --merged 

Se si desidera, è anche possibile includere filiali remote nella lista aggiungendo l'opzione --all:

git branch --all --merged 

Scoprire che i rami hanno non stati fusi in quello corrente è altrettanto facile:

git branch --no-merged 
+0

Grazie per il tuo aiuto! Ho chiarito la domanda con uno screenshot, per mostrare quale parte di gitk mi piacerebbe "trovare" in SourceTree. Ma forse è più facile non usare sourcetree per quella funzione, come hai descritto ... –

+0

Come menzionato nel commento per l'altra risposta, anche questo non funziona! Voglio sapere in quali rami è stato fuso il ramo attuale, non il contrario! –