tutorial - guida git pdf




Puoi eliminare più rami in un comando con Git? (10)

Bene, nel peggiore dei casi, potresti usare:

git branch | grep '3\.2' | xargs git branch -d

Mi piacerebbe ripulire il mio repository locale, che ha un sacco di vecchi rami: per esempio 3.2 , 3.2.1 , 3.2.2 , ecc.

Speravo in un modo subdolo per rimuoverli tutti in una volta. Dato che per lo più seguono una convenzione di rilascio di punti, ho pensato che forse c'era una scorciatoia da dire:

git branch -D 3.2.*

e uccidi tutti i rami 3.2.x.

Ho provato questo comando e, ovviamente, non ha funzionato.


Come in Git tutti i rami non sono nulla con i riferimenti al repository git, perché non basta eliminare i branch che vanno a .git/ref e quindi se qualcosa viene lasciato fuori che non è interessante nel repository sarà automaticamente garbage collection così non devi preoccuparti


Io sono su Windows, puoi usare PowerShell per fare questo:

 git branch | grep 'feature/*' |% { git branch -D $_.trim() }

sostituisci la feature/* con qualsiasi modello che ti piace.


Non con quella sintassi. Ma puoi farlo in questo modo:

git branch -D 3.2 3.2.1 3.2.2

Fondamentalmente, git branch cancellerà più branch per te con una singola chiamata. Sfortunatamente non esegue il completamento del nome del ramo. Sebbene, in bash, puoi fare:

git branch -D `git branch | grep -E '^3\.2\..*'`

Puoi rimuovere tutti i rami rimuovendo tutti i riferimenti non necessari:

rm .git/refs/heads/3.2.*


Puoi usare git gui per eliminare più rami contemporaneamente. Da Prompt dei comandi / Bash -> git gui -> Remoto -> Elimina ramo ... -> seleziona i rami remoti che vuoi rimuovere -> Elimina.


Puoi utilizzare git branch --list per elencare i rami idonei

git branch --list '3.2.*'

Utilizzando git branch -D / -d per rimuovere i rami idonei. Un esempio di linea:

git branch -d `git branch --list '3.2.*'`

Recentemente, stavo cercando la soluzione dello stesso problema, finalmente ho trovato una risposta e sta funzionando molto bene:

  1. Aprire il terminale o equivalente.
  2. Digitare il ramo git | grep "pattern" per un'anteprima dei rami che verranno cancellati.
  3. Digitare il ramo git | grep "pattern" | xargs git branch -D

Questa soluzione è fantastica e se vuoi una spiegazione completa di ogni comando e di come funziona, è here indicato.


Uso

git for-each-ref --format='%(refname:short)' 'refs/heads/3.2.*' |
   xargs git branch -D

git branch  | cut -c3- | egrep "^3.2" | xargs git branch -D
  ^                ^                ^         ^ 
  |                |                |         |--- create arguments
  |                |                |              from standard input
  |                |                |
  |                |                |---your regexp 
  |                |
  |                |--- skip asterisk 
  |--- list all 
       local
       branches

MODIFICARE:

Una versione più sicura (suggerita da Jakub Narębski e Jefromi), poiché l'output del ramo git non è pensato per essere utilizzato negli script:

git for-each-ref --format="%(refname:short)" refs/heads/3.2\* | xargs git branch -D

... o senza xarg:

git branch -D `git for-each-ref --format="%(refname:short)" refs/heads/3.2\*`




git