2011-11-01 15 views
19

Il comando git branch -a elenca un gruppo di rami NON presenti nel repository e NON rami locali. Come possono essere cancellati?Elimina rami elencati da git branch -a

* develop 
    master 
    remotes/origin/cloner 

Per esempio, remotes/origin/cloner utilizzato per esistere nel pronti contro termine, ma da allora è stato cancellato e mi piacerebbe che non apparire durante la digitazione git branch -a.

risposta

27

Se si dispone di filiali a distanza di tracciamento (come ad esempio origin/cloner in questo caso), che sono rimasti dopo il ramo corrispondente è stato eliminato nel repository remoto, è possibile eliminare tutti tali filiali remote-tracking con:

 
git remote prune origin 

Il documentation for git remote spiega questo come:

Elimina tutte le filiali remote-tracking stantii sotto <nome>. Questi rami obsoleti sono già stati rimossi dal repository remoto a cui fa riferimento il nome < >, ma sono ancora disponibili localmente in "telecomandi/<nome>".

Con l'opzione --dry-run, segnalare quali rami verranno potati, ma in realtà non li si potano sfoltire.

+4

E 'l'erba h espandendo su questo, forse solo citando e collegando alla documentazione. –

+0

Grazie, Mark, per la grande modifica! –

-5

Può anche accadere che il riferimento del repository remoto sia stato eliminato dal clone locale, ma venga comunque visualizzato nell'output del comando 'git branch -a'. In ogni caso, è sempre possibile sopprimere qualsiasi riferimento semplicemente cancellando i file corrispondenti:

$ rm -f .git/refs/remotes/cloner 
$ rm -rf .git/refs/remotes/deprecated_remote 
+0

È una cattiva idea eliminare direttamente i file da '.git' piuttosto che usare i comandi di porcellana per farlo. –

+0

Git è abbastanza robusto. Molto spesso è molto utile modificare il file .git/config, ad esempio per aggiungere tracciamento per un determinato ramo o per modificare l'URL di un repository remoto. Guardando direttamente sotto il cofano, una volta puoi capire più facilmente come funziona Git e rendersi conto che è magico come appariva la prima volta. Quindi, non consiglierei a chiunque di modificare i file Git sotto il cofano, ma raccomanderei che abbiano almeno un bottino per quei file. Al mininum, è molto istruttivo. –

3

Per eliminare un ramo che non è più necessario è possibile utilizzare il seguente comando:

git branch -d -r origin/cloner 
+1

Questo deve essere 'git branch -d -r origin/cloner', poiché' origin/cloner' è un ramo di localizzazione remota. –

0

È inoltre fare

git push origin :cloner 

Per rimuovere filiali remote indesiderate

+0

In questo caso, il 'cloner' del ramo è già stato eliminato dal repository remoto, quindi questo produrrà un errore. La domanda sta chiedendo come rimuovere il ramo di origine/cloner del ramo di localizzazione remota, che è rimasto dopo che qualcuno ha cancellato 'cloner' in' origin'. –

+0

Capisco. Quindi, una raccolta di git non dovrebbe semplicemente aggiornare l'elenco di filiali remote? – Patrick