Elimina il ramo remoto, ma appare ancora in 'branch -a'


552

Diciamo che avevo un ramo chiamato coolbranchnel mio repository.

Ora, ho deciso di eliminarlo (sia in remoto che localmente) con:

git push origin :coolbranch
git branch -D coolbranch

Grande! Ora il ramo è davvero cancellato.

Ma quando corro

git branch -a

Ricevo ancora:

remotes/origin/coolbranch

Qualcosa da notare, è che quando clono un nuovo repository, tutto va bene e git branch -anon mostra il ramo.

Voglio sapere: c'è un modo per eliminare il ramo branch -adall'elenco senza clonare una nuova istanza?



58
Se tu git fetch -p(o git pull -p) allora i rami remoti saranno potati.
yoyo

Risposte:


689

git remote prune origin, come suggerito nell'altra risposta, rimuoverà tutti questi rami stantii. Questo è probabilmente quello che vorresti nella maggior parte dei casi, ma se vuoi semplicemente rimuovere quel particolare ramo di tracciamento remoto, dovresti fare:

git branch -d -r origin/coolbranch

( -rÈ facile dimenticare ...)

-rin questo caso "Elenca o elimina (se utilizzato con -d) i rami di tracciamento remoto". secondo la documentazione Git disponibile qui: https://git-scm.com/docs/git-branch


11
git remote prune origino qualsiasi forma di git fetch --prunesegnalazione non ha funzionato per me nel mio caso. ... Ma git branch -d -r origin/feature/branch-nameha funzionato. Non sono sicuro che avesse qualcosa a che fare con il fatto che si trovasse sotto lo featurespazio dei nomi (git flow) ma è così che è andato giù, nel caso in cui qualche googler scopra che succede a loro.
Misterparker,

8
C'è una ragione per cui è necessario? Sembra davvero male lasciare questi nomi di rami inesistenti nell'elenco e non eliminarli automaticamente.
Akronymn,

296

Provare:

git remote prune origin

Dalla documentazione remota di Git :

fesso

Elimina tutti i rami di tracciamento remoto non aggiornati in <nome>. Questi rami non aggiornati sono già stati rimossi dal repository remoto a cui fa riferimento <name>, ma sono ancora disponibili localmente in "telecomandi / <name>".

Con l'opzione --dry-run, segnala quali rami verranno potati, ma in realtà non li pota.


1
Per completezza: deve essere simile a git pull --prunemenzionata in stackoverflow.com/a/17983126/94687 E:git remote update --prune
IMZ - Ivan Zakharyaschev

230

Non dimenticare il fantastico

git fetch -p

che recupera e pota tutte le origini.


Per completezza: devono essere uguali git remote prune origine simili a quelli git pull --prunemenzionati rispettivamente su stackoverflow.com/a/6127884/94687 e stackoverflow.com/a/17983126/94687 . E:git remote update --prune
imz - Ivan Zakharyaschev,

2
Ma i rami saranno ancora visibili se corrigit branch -a
Nikhil Sahu

1
@NikhilSahu: non vedo più i rami remoti che sono stati rimossi congit branch -a
user276648

20

Nel nostro caso particolare, utilizziamo Stash come repository Git remoto. Abbiamo provato tutte le risposte precedenti e non funzionava nulla. Alla fine abbiamo dovuto fare quanto segue:

git branch –D branch-name (delete from local)
git push origin :branch-name (delete from remote)

Quindi, quando gli utenti sono andati a apportare modifiche, dovevano eseguire le seguenti operazioni:

git fetch -p

git branch -d branch-nameha funzionato per me. Avviso -Da -d. Infatti quando ho provato con la maiuscola D -Dha creato un nuovo ramo con nome -D
RP-

1
"-D" è un modo per forzare l'eliminazione indipendentemente dal suo stato push o merge. Ovviamente stai attento ad usarlo, ma in molti casi è stato necessario.
Shadowvail

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.