Git dice que la referencia remota no existe cuando borro la rama remota

130

Yo corri git branch -a

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

Quiero borrar mi rama remota

He intentado

git push origin --delete remotes/origin/test

tengo

error: no se puede eliminar 'remotes / origin / test': la referencia remota no existe

¿Cómo es que no existe?

Hice un git branch -a, y lo vi en la lista.

Yo me perdí algo ?

cyber8200
fuente
1
git branch -aenumerará las sucursales en su local y no desde su control remoto. ¿Correcto?
Creo que todos ellos. No estoy seguro.
cyber8200
2
Mostrará las sucursales remotas dentro de su local. No enumerará todas las ramas remotas.
1
@peterh Me parece que realmente está preguntando "¿por qué no puedo eliminar una rama remota?" (probablemente cuando la rama se ha eliminado del control remoto pero la referencia remota todavía está presente localmente) y, por lo tanto, no es un duplicado, pero podría funcionar con un título más claro
Andrew Spencer el
1
Hice una edición del título, espero que esté más cerca de la intención de la pregunta
Andrew Spencer

Respuestas:

259

El comando git branch -amuestra ramas remotas que existen en su repositorio local . Esto puede sonar un poco confuso, pero para entenderlo, debe comprender que hay una diferencia entre una rama remota y una rama que existe en un repositorio remoto. Las ramas remotas son ramas locales que se asignan a ramas del repositorio remoto. Entonces, el conjunto de ramas remotas representa el estado del repositorio remoto.

La forma habitual de actualizar la lista de ramas remotas es usar git fetch. Esto obtiene automáticamente una lista actualizada de ramas desde el control remoto y configura ramas remotas en el repositorio local, también recuperando cualquier objeto de confirmación que pueda faltar.

Sin embargo, de forma predeterminada, git fetchno elimina las ramas remotas que ya no tienen una rama equivalente en el control remoto. Para hacer eso, necesita explícitamente podar la lista de ramas remotas:

git fetch --prune

Esto eliminará automáticamente las ramas remotas que ya no existen en el control remoto. Después, git branch -rle mostrará una lista actualizada de ramas que realmente existen en el control remoto: y aquellas que puede eliminar usando git push.

Dicho esto, para usarlo git push --delete, debe especificar el nombre de la rama en el repositorio remoto; No es el nombre de su sucursal remota. Entonces, para eliminar la rama test(representada por su rama remota origin/test), usaría git push origin --delete test.

dar un toque
fuente
También git branch -r | grep "origin"le ayudará con grandes proyectos que utilizan la horquilla
Seraf
Por lo tanto, hay 2 razones para obtener este mensaje de git: o la rama ya se eliminó en el servidor, o usted prefirió erróneamente el nombre de la rama con remotes/origin/. O ambos.
Andrew Spencer
136

El significado de remotes/origin/testes que tiene una rama llamada testen el servidor remoto origin. Entonces el comando sería

git push origin --delete test
drosam
fuente
25

Hay un acceso directo para eliminar la rama en el origen:

git push origin :<branch_name>

Que es lo mismo que hacer git push origin --delete <branch_name>

Ricardo Magalhães
fuente
13
  1. obtener la lista de sucursales remotas
git fetch # synchronize with the server
git branch --remote # list remote branches
  1. Debería obtener una lista de las ramas remotas:
origin/HEAD -> origin/master
origin/develop
origin/master
origin/deleteme
  1. ahora podemos eliminar la rama:
git push origin --delete deleteme
MovGP0
fuente
11

git push origin --delete yourBranch

Matheus Marsiglio
fuente
4

Dado que la rama remota es control remoto / origen / prueba, puede usar dos formas:

git push origin --delete test

y

git branch -D -r origin/test
Symeon Mattes
fuente
3

Seguí la solución por golpe con un pequeño ajuste al final. Mis pasos siguen
- git fetch --prune;
- git branch -aimprimiendo lo siguiente
    master
    branch
    remotes/origin/HEAD -> origin/master
    remotes/origin/master
    remotes/origin/branch(rama remota para eliminar)
- git push origin --delete branch.
Aquí, la rama a eliminar no se nombra como remotes/origin/branchsimplemente branch. Y se quita la rama.

Yanqi Huang
fuente
+1 para el comentario sobre el nombre de la sucursal que intentaba eliminar origin/branchcuando debería ser branch.
Ken
1

git branch -a enumerará las sucursales en su local y no las sucursales en su control remoto.

Y el error error: unable to delete 'remotes/origin/test': remote ref does not existsignifica que no tiene una rama con ese nombre en su control remoto, pero la rama existe en su local.


fuente
Esto es útil. resolvió mi problema de eliminación. Me pregunto por qué 'git push --Eliminar origen / prueba' no funcionó, mientras que "git push --Eliminar prueba" funcionó
usuario10293779
1

Una guía práctica para eliminar ramas del origen que no sean 'maestro':

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

¡Asegúrese de comprender las implicaciones de ejecutar esto antes de hacerlo!

eddiewould
fuente
gracias por este código! Este es el único código git que probé trabajando para eliminar todas las ramas remotas, excepto el maestro.
Alvin
1

Para mí esto funcionó $ ▶ git branch -D -r origin / mybranch

Detalles

$ ▶ git branch -a | grep mandos a distancia mybranch / origen / mybranch

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

$ ▶ git branch desarrollo * característica / pre-implementación

$ ▶ git push origin --Eliminar error de mybranch: no se puede eliminar 'mybranch': error de referencia remota no existe: error al insertar algunas referencias a '[email protected]: config / myrepo.git'

$ ▶ git branch -D -r origin / mybranch Se eliminó la sucursal remota origin / mybranch (era 62c7421).

$ ▶ git branch -a | grep mybranch

$ ▶ git branch -r | grep mybranch

Buggy B
fuente
-1
git push origin --delete origin/test 

debería funcionar también

Sajal Choukse
fuente
2
Debería ser GIT Push Origin --Eliminar prueba
Andreas Presthammer