2012-05-22 20 views
8

git branch -a --contains <hash> mi dà tutti quei rami contenenti hash. quello che voglio è git branch -a --no-contains <hash>. Sfortunatamente, non sembra esserci un comando per farlo, quindi penso che la soluzione sia qualcosa come:Mostra rami che non contengono commit

git branch -a | grep -v output of(git branch -a --contains) ma la mia bash non è all'altezza del compito.

Show all branches that commit A is on and commit B is not on? sembrerebbe applicarsi, ma l'approccio sembra più complicato del necessario.

Qual è l'approccio migliore/più semplice per eseguire quanto sopra?

+0

Per visibilità: ** Il flag '--no-contains' è stato aggiunto in [Git 2.13] (https://github.com/git/git/blob/v2.13.0/Documentation/RelNotes/2.13.0 .txt) ** .. Come indicato in [la mia risposta] (https://stackoverflow.com/a/44687845/1667513). – nonsensickle

risposta

11

grep ha un'opzione -F che corrisponde alle stringhe fisse. Sarebbe utile per quello che stai facendo.

git branch -a | grep -vF "$(git branch -a --contains <hash>)" 

Purtroppo, -F filtrerà rami nomi che hanno una corrispondenza parziale. Come suggerito da Antak, possiamo usare comm invece per una diff più affidabile.

git branch -a | sort | comm -3 - <(git branch -a --contains <hash> | sort) 
+1

+1 Questo fa il trucco. Semplice e al punto. – ralphtheninja

+0

sì, sicuramente. Grazie! – kayaker243

+0

Si noti che questo in modo non corretto nasconde i rami che corrispondono parzialmente ai nomi dei rami che contengono detto commit. per esempio. 'echo -e" aaa \ nbbb "| grep -vF "$ (echo aa)" ' – antak

2

Dato che la risposta accettata verrà eseguito afoul se i nomi filiali in parte coincidono, ecco uno che gestisce questo situtuation.

git branch -a | comm -3 - <(git branch -a --contains <hash>) 

| sort possono essere aggiunti alla fine di entrambi i comandi, se l'avviso comm: file 1 is not in sorted order vi disturba. Tuttavia, questo non è necessario per ottenere risultati corretti poiché l'ordine dei due ingressi è equivalente.

Problemi correlati