2013-07-29 27 views
61

Ho utilizzato git branch -d myBranch per eliminare un ramo. Tuttavia, quando sono su master e provo a effettuare il checkout di un nuovo ramo con git checkout, myBranch viene ancora visualizzato nel completamento automatico della scheda.Come rimuovere i nomi dei rami cancellati dal completamento automatico?

Come rimuovere il nome myBranch dalla funzione di completamento automatico della scheda per git checkout?

+7

Il comando 'git branch -a' elenca ancora' myBranch' o 'origin/myBranch'? Nota che, anche se 'myBranch' non esiste,' git checkout myBranch' è ancora una scorciatoia valida per 'git checkout -b myBranch origin/myBranch' se 'origin/myBranch' esiste. – twalberg

+1

@twalberg vale la pena di postare come risposta. – cmbuckley

risposta

41

Una possibile ragione è che, se una filiale remota (ad esempio origin/myBranch) esiste ancora, allora git checkout myBranch riuscirà come alternativa a git checkout -b myBranch origin/myBranch. Questo è inteso come comodità per il caso comune di estrarre un ramo remoto per la prima volta, creando un ramo di localizzazione locale identico.

Ci sono altre possibilità, a seconda di cosa si sta usando esattamente per il completamento, ma questa è una delle prime cose che controllo. Se si esegue git branch -a e vi è un elenco origin/myBranch (o uno per un telecomando diverso da origin, se si dispone di tale), è probabile che sia un colpevole.

+0

Grazie! Questo sembra essere il colpevole. 'origin/myBranch' esiste ancora. Se ho cancellato il ramo 'myBranch' su Github (tramite l'interfaccia online), è sicuro per me chiamare' git branch -d origin/myBranch' per rimuovere quel ramo remoto? –

+52

@JohnHoffman Questo dovrebbe essere sicuro, ma penso che il modo migliore sarebbe 'git fetch --prune origin'. Questo pulirà tutti i rami di localizzazione locali che non esistono più sul telecomando. – twalberg

+0

Grazie! Ha funzionato! –

0

Probabilmente non è roba da fare, è la shell che termina il comando da quando l'hai usata una volta in precedenza.

Puoi dare uno sguardo alla tua cronologia digitando history o modificando ~/.bash_history. Puoi modificare la cronologia dal file ~/.bash_history oppure puoi digitare history quindi inserire il numero di riga con git checkout myBranch al suo interno, quindi utilizzare history -d {line number here}. Come ultima risorsa, è possibile utilizzare il comando history -c per eseguire il nuke della cronologia.

+2

No, questa non è una storia di storia bash. Questo è [git autocomplete] (http://apple.stackexchange.com/questions/55875/git-auto-complete-for-branches-at-the-command-line). Uno strumento diverso ma molto utile. – Arjan

+0

@Arjan Wow, non sapeva che lo ha fatto. Suppongo che ho pensato che la scheda non avrebbe funzionato e non l'ho mai provata. Grazie! –

+0

Quindi lo stesso Linux scrive qualcosa, si potrebbe scommettere che è arrivato con completamento automatico: 3 – ThorSummoner

68

git fetch --prune --all

questo distacco come propria risposta in quanto si tratta di una correzione di una sola riga, ma se si vota essere sicuri di votare per @ di twalberg risposta di cui sopra.

il suggerimento di @ twalberg a git branch -a mi ha portato sulla buona strada; il mio collega ha suggerito git fetch --prune --all per potare tutti i rami morti da tutti i telecomandi, il che è utile quando si lavora con molti sviluppatori con molte forchette.

+7

Mentre la risposta accettata dà una bella spiegazione del perché questo accade, questa risposta presenta una soluzione reale al problema e dovrebbe quindi essere accettata IMHO. –

Problemi correlati