2013-06-15 17 views
7

Ho un repository remoto e 2 cloni.
Creo un ramo in uno dei cloni, ad es. test. Faccio un po 'di lavoro e 2 impegni. Mi unisco al ramo master e al ramo push -u.
Faccio un git pull nell'altro clone.
Vedo sia master e test.
Nel primo progetto clone faccio:
git origin :test per eliminare il ramo test nel repository remoto.
test viene eliminato nei repository remoti.
I git branch -D test e il ramo test vengono eliminati localmente.
Se faccio git branch -a ottengo:Perché vedo un ramo remoto cancellato?

*master 
remotes/origin/master  

Ora nella seconda repository lo faccio un git pull.
Sul pull il locale test sembra essere cancellato ma git sembra "pensare" che il ramo remoto test esista ancora.
Se faccio git branch -a ottengo:

* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 
    remotes/origin/test  

Perché l'cancellato test ramo appaiono come una filiale remota?

risposta

3

Provare a utilizzare questo comando git remote prune origin. Il ramo cancellato dovrebbe scomparire. Questo dovrebbe rimuovere i riferimenti locali ai rami remoti.

+0

In realtà mi aspettavo che 'git' mi chiedesse di farlo nello stesso modo in cui richiede di eseguire' git pull'. Perché non richiede? L'ho visto suggerire ma forse era in un caso d'uso diverso? – Cratylus

+0

Sì, so cosa intendi. Non posso davvero dire di aver visto qualcosa di git a riguardo quando faccio un pull, quindi immagino che sia stato un caso d'uso diverso. Hai provato a spingere qualcosa verso un ramo cancellato? – crea1

10

Le opzioni predefinite per git fetch (e di conseguenza git pull) non eliminano i rami remoti eliminati. Non sono sicuro di quale sia la logica alla base di questa impostazione predefinita. In ogni caso, per potare rami remoti eliminati, o prendere con

git fetch -p 

o eseguire

git remote prune [-n] <name> 

esplicitamente. Con il flag -n, esso segnalerà quali rami saranno potati, ma in realtà non li potenzierà. Vedere git-fetch(1) e git-remote(1) per ulteriori informazioni.

+0

Ma se il repository non fosse mio, come potrei sapere che avrei bisogno di "sfoltire"? – Cratylus

+1

È possibile eseguire 'git remote prune -n ​​' per ottenere una lista, ma ho sempre eseguito 'git fetch -p' ogni volta che eseguo il recupero. Non mi rendevo conto che non c'era un'opzione per questo su 'git pull' dato che non ho mai usato' git pull'. –