Al eliminar la rama remota de git "error: no se puede enviar a un destino no calificado"


139

Estoy tratando de eliminar una rama remota de git con

git push origin :my_remote_branch

y obteniendo:

error: unable to push to unqualified destination: my_remote_branch
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@example.com:/myrepo'

estas son mis ramas actuales

git branch -a
* develop
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/my_remote_branch

git branch -r --merged
  origin/HEAD -> origin/master
  origin/develop
  origin/master

Cualquier idea sobre cómo puedo deshacerme de esta rama sería apreciada.


¿Intentó git fetchver si corrigió ese nombre remoto no existente? ¿Intentaste entrar .git\refs\remotes\originy eliminar el my_remote_brancharchivo para ver si eso es suficiente?
— VonC

lo hizo git fetchpero eso no ayudó. Intentará buscar una solución más sencilla antes de intentar eliminar el archivo manualmente.
— Hugo

intente eliminar o al menos mover ese archivo: contiene solo el SHA1 de la punta de esa rama.
— VonC

45
Debe hacer git fetch -ppara deshacerse de las ramas de seguimiento obsoletas.
— Jan Hudec

Respuestas:


270

El hecho de que refs/remotes/origin/my_remote_branchexista en su repositorio local no implica que refs/heads/my_remote_branchexista en el originrepositorio remoto.

Haz git fetch -p originque refs/remotes/origin/my_remote_branchdesaparezca si ya se eliminó en origen. La -popción le dice a fetch que elimine cualquier rama de rastreo que ya no exista en los controles remotos correspondientes; por defecto se mantienen alrededor.


12
git fetch -p originMe lo arregló. Muchas gracias.
— redimp

1
Tu respuesta es asombrosa. Corto y sobre la esencia!
— 1nstinct

la poda no ayudó! mientras que git push origin --delete origin/feature/xme dio un error sobre la inexistencia, la referencia git push origin :feature/xeliminó la rama. Así que supongo git push origin --delete <branchName>que no debería incluir el origen en branchName (?) Pero está lleno de bash, lo cual es confuso.
— guiones

@dashesy, estabas en una situación diferente a la del autor de la pregunta original. En la pregunta original, el problema es que la rama remota ya fue eliminada , presumiblemente por otra persona, por lo que solo el local tuvo que sincronizarse. Mientras está borrando el control remoto. De hecho, el comando debería serlo git push origin --delete feature/x, porque está dando el nombre de la rama en el origen , y no tiene ese prefijo allí (de lo contrario, las dos formas son sinónimos).
— Jan Hudec

@JanHudec tiene sentido. Bash complete es inteligente cuando se usa :para no incluir, originpero se completa como en origin/branch_namelugar de simplemente branch_namecuando se usa la --deletevariante.
— guiones

56

Pregunta encontrada limpiando viejas ramas remotas de git y esto hizo el truco

git branch -r -d origin/my_remote_branch

He estado tratando de hacer exactamente esto durante aproximadamente una hora, ¡muchas gracias!
— sebkkom

Esto no elimina la rama remota. Si vas a buscar a Git, volverás a ver la rama. Simplemente elimínelo de su lista local de sucursales remotas.
— Patrick Desjardins

2
@PatrickDesjardins git push origin :my_remote_branchelimina exactamente la rama del control remoto y la git branch -r -d origin/my_remote_branchelimina de mi lista local de ramas remotas
— Hugo

11

Me encontré con esto al intentar eliminar una rama remota que ya había sido eliminada. Todo lo que se necesitaba era una ciruela:

git remote prune origin

4

Intente seguir dos opciones para eliminar la rama remota por la fuerza

Opción 1

get push origin --delete <branchName>

opcion 2

git fetch -p origin
git branch -r -d origin/<branchName>

3
git branch -r -d origin/my_remote_branch

No fue suficiente para mí. Antes tenía que ir al servidor y trabajar con el directorio git directamente (lo cual es peligroso y feo) para eliminar la rama:

ssh mygitserver
su - git
cd /home/git/repositories/my_remote_branch.git/
git  --git-dir=. --work-tree=/tmp/ branch -D my_remote_branch

No solo es peligroso y feo, también está mal . Por un lado, esta pregunta se trata de eliminar la sucursal localmente cuando se ha eliminado en forma remota. Y por el otro, eliminar una rama del control remoto es solo cuestión de git push origin :my_remote_branch. Cuidado con el colon.
— Jan Hudec

Tienes razón Jan, esa git push origin :my_remote_branches la forma normal. Esta forma fea y peligrosa es cuando esto no funciona (por ejemplo, debido a un git mal configurado).
— pevik

1

Tengo un problema similar. Primero fui a esta discusión, sin embargo, no pude resolver el problema hasta que vi https://stackoverflow.com/a/32147743/4209849 .

que simplemente agregan un consejo sobre distinguir origin/my-branch-namey my-branch-name.

Para ser específico, debería usar:

git push origin :my_remote_branch

en vez de

git push origin :origin/my_remote_branch

Esto resolvió mi problema al menos, espero que también ayude a otros.


1

Para mí, el problema era que esta era mi rama predeterminada en github. Cambié la rama predeterminada, luego la operación de eliminación se realizó correctamente.

Espero que ayude a alguien


0

Tuve este mismo problema, edité manualmente mi ./.git/configarchivo para incluir:

[branch "branchName"]
remote = origin
merge = refs/heads/branchName

Lo que resultó en: error: src refspec branchName matches more than one.Esto lo arreglé corriendo $git tag -d branchName. Después de lo cual pude impulsar la nueva sucursal hacia arriba.


0

Esto funcionó para mí: creé la rama remota en la interfaz de usuario de github y luego presioné mi rama local que tenía el mismo nombre. Pruébelo en caso de que otras formas no funcionen. Otra forma sería crear una nueva rama localmente y presionar una rama vacía y luego seleccionar su confirmación y presionar nuevamente a su control remoto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.