Git dice che il riferimento remoto non esiste quando cancello il ramo remoto


130

Ho corso git branch -a

* master
  remotes/origin/test
  remotes/origin/master

Voglio cancellare il mio ramo remoto

ho provato

git push origin --delete remotes/origin/test

ho ottenuto

errore: impossibile eliminare "telecomandi / origine / test": il riferimento remoto non esiste

Come non esiste?

Ho fatto un git branch -ae l'ho visto elencato.

Mi sono perso qualcosa?


1
git branch -aelencherà le filiali nel tuo locale e non dal tuo telecomando. Destra?

Penso a tutti loro. Non sono sicuro.
cyber8200,

2
Mostrerà i rami remoti all'interno del tuo locale. Non elencherà tutti i rami remoti.

1
@peterh Mi sembra che stia davvero chiedendo "perché non posso eliminare un ramo remoto" (probabilmente quando il ramo è stato cancellato dal telecomando ma il riferimento remoto è ancora presente localmente) e quindi, non un duplicato ma potrebbe fare con un titolo più chiaro
Andrew Spencer

1
Ho fatto una modifica al titolo, spero che questo sia più vicino all'intento della domanda
Andrew Spencer,

Risposte:


259

Il comando git branch -amostra i rami remoti esistenti nel repository locale . Questo può sembrare un po 'confuso ma per capirlo, devi capire che c'è una differenza tra un ramo remoto e un ramo che esiste in un repository remoto. I rami remoti sono rami locali che si associano ai rami del repository remoto. Quindi l'insieme dei rami remoti rappresenta lo stato del repository remoto.

Il solito modo di aggiornare l'elenco delle filiali remote è usare git fetch. Ciò ottiene automaticamente un elenco aggiornato di rami dal remoto e imposta i rami remoti nel repository locale, recuperando anche tutti gli oggetti di commit che potrebbero mancare.

Tuttavia, per impostazione predefinita, git fetchnon rimuove i rami remoti che non hanno più un ramo di controparte sul telecomando. Per fare ciò, è necessario eliminare esplicitamente l'elenco dei rami remoti:

git fetch --prune

Ciò eliminerà automaticamente i rami remoti che non esistono più sul telecomando. Successivamente, git branch -rti mostrerà un elenco aggiornato di rami realmente esistenti sul telecomando: e quelli che puoi eliminare usando git push.

Detto questo, per poter utilizzare git push --delete, è necessario specificare il nome del ramo sul repository remoto; non il nome del tuo ramo remoto. Quindi per eliminare il ramo test(rappresentato dal tuo ramo remoto origin/test), dovrai usare git push origin --delete test.


Inoltre git branch -r | grep "origin"vi aiuterà con grandi progetti che utilizzano forcella
Seraf

Quindi ci sono 2 motivi per ottenere questo messaggio da git: o il ramo è già stato cancellato sul server, o hai erroneamente aggiunto il nome del ramo con remotes/origin/. O entrambi.
Andrew Spencer,

136

Il significato di remotes/origin/testè che hai un ramo chiamato testnel server remoto origin. Quindi il comando sarebbe

git push origin --delete test

25

C'è un collegamento per eliminare il ramo nell'origine:

git push origin :<branch_name>

È lo stesso che fare git push origin --delete <branch_name>


13
  1. ottenere l'elenco di filiali remote
git fetch # synchronize with the server
git branch --remote # list remote branches
  1. dovresti ottenere un elenco dei rami remoti:
origin/HEAD -> origin/master
origin/develop
origin/master
origin/deleteme
  1. ora possiamo eliminare il ramo:
git push origin --delete deleteme


4

Dato che il ramo remoto è telecomandi / origine / test è possibile utilizzare due modi:

git push origin --delete test

e

git branch -D -r origin/test

3

Ho seguito la soluzione da poke con un piccolo aggiustamento alla fine. I miei passi seguono
- git fetch --prune;
- git branch -astampa quanto segue
    master
    branch
    remotes/origin/HEAD -> origin/master
    remotes/origin/master
    remotes/origin/branch(ramo remoto da rimuovere)
- git push origin --delete branch.
Qui, il ramo da rimuovere non è nominato come remotes/origin/branchma semplicemente branch. E il ramo viene rimosso.


+1 per il commento re: il nome del ramo, stavo cercando di eliminare origin/branchquando dovrebbe essere branch.
Ken,

1

git branch -a elencherà i rami nel tuo locale e non i rami nel tuo telecomando.

E l'errore error: unable to delete 'remotes/origin/test': remote ref does not existsignifica che non hai un ramo con quel nome nel tuo telecomando ma il ramo esiste nel tuo locale.


questo è utile ha risolto il mio problema di eliminazione. mi chiedo perché 'git push --delete origin / test' non ha funzionato, mentre "git push --delete test" ha funzionato
user10293779

1

Un pratico one-liner per eliminare i rami diversi da "master" dall'origine:

git branch --remotes | grep -v 'origin/master' | sed "s/origin\///" | xargs -i{foo} git push origin --delete {foo}

Assicurati di comprendere le implicazioni dell'esecuzione prima di farlo!


grazie per questo codice! questo è l'unico codice git che ho provato lavorando sull'eliminazione di tutti i rami remoti tranne master.
Alvin,

1

Per me questo ha funzionato $ ▶ git branch -D -r origin / mybranch

Dettagli

$ ▶ git branch -a | telecomandi grep mybranch / origine / mybranch

$ ▶ git branch -r | grep mybranch origin / mybranch

$ ▶ git branch sviluppa * funzionalità / pre-distribuzione

$ ▶ git push origin - elimina errore mybranch: impossibile eliminare "mybranch": l'errore remoto non esiste errore: impossibile inviare alcuni riferimenti a "git@10.102.100.38: config / myrepo.git"

$ ▶ git branch -D -r origin / mybranch Cancella branch branch origin / mybranch (era 62c7421).

$ ▶ git branch -a | grep mybranch

$ ▶ git branch -r | grep mybranch


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.