2012-09-26 13 views
34

Sono abbastanza nuovo nell'usare git e lo uso per contribuire alla ROM Android AOKP. Ho creato con successo alcuni rami, modificato il codice e caricato i commit che sono stati uniti sul lato remoto. Ma nel mio repository locale, quelle filiali sono ancora visibili (anche se si presentano come senza modifiche). Il problema è che quando ho creato questi rami, l'ho fatto direttamente dalla sottocartella che doveva essere modificata, quindi non ho nessun ramo "più alto" in cui andare. E a causa di ciò, non riesco a cancellare quei rami - git tels me error: Cannot delete the branch 'MyMods' which you are currently on.Come posso eliminare (o unire) un ramo Git locale in cui sono attualmente attivo?

Quindi cosa posso fare per sbarazzarmi di quei rami?

+0

Git non permette questo perché è un po 'intelligente di questa gente: https: // www. youtube.com/watch?v=zE8el_qscvE – Krumia

risposta

50

Checkout un ramo diverso prima, prima di eliminarlo:

git checkout master 
git branch -d MyMods 

Inoltre, i rami non hanno nulla a che fare con le cartelle. Git traccia sempre l'intero repository contemporaneamente, con tutte le sue cartelle e file. Un ramo non è nient'altro che un puntatore a un singolo commit, o istantanea, nella cronologia del repository.

+0

Capisco la differenza tra cosa fa git e cartelle fisiche. Odio solo vedere un avviso ogni volta che eseguo "repo sync" che il mio ramo è un numero di commit dietro e, dato che ho finito, voglio liberarmene. Ma se eseguo il checkout di un ramo master, non mi imbatto negli stessi problemi perché il ramo master sarà sospeso lì senza commit? – user496854

+0

Ho seguito questo tutorial originale: http: //rootzwiki.com/topic/22424-aokp-gerrit-tutorial, e ho appena creato un ramo proprio nell'app che stavo modificando. Quindi, vuoi dire che devo controllare l'intero albero AOKP, e in che modo ciò influenzerà la mia normale sincronizzazione dei pronti contro termine? – user496854

+0

'git checkout master' (o qualsiasi altro ramo) non dà alcuna risposta, il comando sembra richiedere sempre. Penso che un ramo sia rotto in qualche modo, quindi voglio rimuoverlo. –

3

Sì solo checkout un altro ramo (forse master) e poi:

git checkout maestro git branch -d thebran

0

Ma nel mio repository locale, quei rami sono ancora rivelare (anche sebbene si presentino come senza cambiamenti).

I rami verranno visualizzati nel repository locale a meno che non li elimini. Non scompaiono quando li spingi.

Le risposte precedenti spiegano come eliminare un ramo. Tuttavia, vorrei aggiungere che l'uso dell'opzione -D è un po 'più potente. Questa opzione cancella il ramo a prescindere dalla sua (in) Stato fuse:

git branch -D branchName 

E 'la bomba atomica del ramo di eliminazione. Usare con cura.

+0

il post originale afferma espressamente che non mi consentirà di eliminare il ramo perché ci sono attualmente su di esso, e non ci sono rami più alti su cui spostarsi. Quindi, come può aiutarti la tua risposta? – user496854

+0

Dovrai prima cambiare ramo - ha dimenticato di aggiungerlo. E il mio commento indica anche l'altra risposta che afferma che è possibile eliminare solo un ramo su cui non si è attivi. – gitlinggun

+0

Cosa intendi per "rami più alti"?Questo non significa nulla nel mondo git. – gitlinggun

1

Se il ramo non è possibile eliminare un worktree allora potrebbe essere necessario cancellare quel worktree prima:

rm -r MyMods 
git worktree list # shows MyMods 
git worktree prune 
git worktree list # doesn't show MyMods 
git branch -d MyMods 
Problemi correlati