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 '[email protected]:/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.

Hugo
fuente
¿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.

Jan Hudec
fuente
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
Hugo
fuente
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
Mateo
fuente
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>
Pawan Maheshwari
fuente
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
pevik
fuente
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.

Kangqiao Zhao
fuente
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

Vlad Pulichev
fuente
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.

Kaweesi Joseph
fuente
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.

Nutan
fuente