No se puede enviar a una rama remota, no se puede resolver para que se ramifique

110

Migré mis repositorios de Bitbucket o Github. No creo que esto importe, pero es lo único diferente ... Durante un tiempo tuve dos controles remotos configurados:

origin: bitbucket
github: github

Luego eliminé ambos y apunté el origen a github:

git remote remove origin
git remote remove github
git remote add origin https://github....

Prueba de empuje de rama de desarrollo:

git push origin develop

Todo actualizado, ok, bien.

Cree una nueva rama para trabajar como de costumbre:

git checkout -b Feature/Name

Actualice uno o dos archivos. Intente presionar al control remoto:

git push origin Feature/Name

Esto da como resultado el error:

fatal: Característica / Nombre no se puede resolver para bifurcar

Busque en línea este problema, encuentre algunas cosas para asegurarse de que HEAD sea correcto, otros sobre asegurarse de que el nombre de mi rama sea correcto (aunque, en este punto, la rama aún no existe en el control remoto). No se puede resolver.

Ejecutó este comando:

git push --all -u

Esto llevó a mi Feature/Namerama a github, pero aún veo el mismo comportamiento que antes:

git push origin develop
git push origin Feature/Name

El primero funciona, el segundo arroja el mismo error.

No puedo entender por qué recibo este error. ¿Algunas ideas?

jleach
fuente
1
¿En qué rama estabas cuando hiciste Feature/Name? ¿Estás seguro de que Feature/Name existe y esa es la rama comprobada? Consulte con git branch.
Schwern
@Schwern: solo existían tres ramas (local y remotamente): desarrollar, probar y dominar. Una vez que una rama se limpia y se vuelve a fusionar para desarrollar, la elimino localmente (y de forma remota si corresponde). Estoy seguro de que solo eran mis tres: no he abierto el proyecto en un tiempo y lo primero que hice fue verificar y asegurarme de que no tenía ramas sueltas.
jleach
¿Eso significa que corrió git branchpara verificar que Feature/Nameexiste localmente? No confíe en una GUI o IDE. Además, ¿entendiste bien el caso?
Schwern
¿Qué tal git push origin Feature/Name:Feature/Name?
ElpieKay
Ahora estoy enojado ... no estoy seguro de por qué no funcionó en primer lugar, pero después de usarlo git push --all -utengo la nueva rama en github, pero aún no pude presionar desde local, ¿verdad? SQLMigration/ReportFixesEsto es lo que sucedió con eso ... el nombre real de la rama es y lo que está en github es SqlMigration/ReportFixes. Entonces, ahora puedo git push origin SqlMigration/ReportFixes, ¿por qué github cambia la carcasa por mí? Agh.
jleach

Respuestas:

379

Yo también estaba teniendo este problema y me estaba volviendo loco. Tenía algo como feature/namepero git branch -ame lo mostró FEATURE/name. Cambiar el nombre de la rama, eliminarla y recrearla, nada funcionó. Lo que finalmente lo arregló:

Entrar en .git/refs/heads

Verás una FEATUREcarpeta. Cambie el nombre a feature.

Ty Le
fuente
4
Esta fue la respuesta correcta para mí. Estaba usando gitbash en Windows y había creado feature / some-feature y Feature / some-feature.
Dylan McCurry
Esto debe marcarse como la respuesta correcta. Me ayudó. ¡Gracias!
GuiDoody
21
¡Te debo cerveza por esta respuesta! : D
Vojta
1
Vaya, buen partido. Me ahorró mucho tiempo. Gracias !
Piyush
2
@Pegues - hecho. No creo que esta respuesta existiera hasta mucho después de que tuve el problema, pero parece ser la más popular, así que ya está.
jleach
30

Según mis propias pruebas y los comentarios del OP , creo que en algún momento se equivocaron con la carcasa del nombre de la rama.

Primero, creo que el OP está en un sistema operativo que no distingue entre mayúsculas y minúsculas como OS X o Windows. Luego hicieron algo como esto ...

$ git checkout -b SQLMigration/ReportFixes
Switched to a new branch 'SQLMigration/ReportFixes'

$ git push origin SqlMigration/ReportFixes
fatal: SqlMigration/ReportFixes cannot be resolved to branch.

Tenga en cuenta la diferencia de carcasa. También tenga en cuenta que el error es muy diferente de si simplemente escribe el nombre.

$ git push origin SQLMigration/ReportFixme
error: src refspec SQLMigration/ReportFixme does not match any.
error: failed to push some refs to '[email protected]:schwern/testing123.git'

Debido a que Github usa el sistema de archivos para almacenar nombres de sucursales, intenta abrir .git/refs/heads/SqlMigration/ReportFixes. Debido a que el sistema de archivos no distingue entre mayúsculas y minúsculas, se abre con éxito, .git/refs/heads/SqlMigration/ReportFixespero se confunde cuando intenta comparar los nombres de las ramas entre mayúsculas y minúsculas y no coinciden.

No estoy seguro de cómo llegaron a un estado donde está la sucursal local SQLMigration/ReportFixesy la sucursal remota SqlMigration/ReportFixes. No creo que Github se haya metido con el nombre de la rama remota. La explicación más simple es que alguien más con acceso push cambió el nombre de la rama remota. De lo contrario, en algún momento hicieron algo que logró crear el control remoto con el error tipográfico. Si comprueban su historial de shell, tal vez con history | grep -i sqlmigration/reportfixespuedan encontrar un comando donde escribieron mal la carcasa.

Schwern
fuente
Me encontré con este problema cuando cambié el caso de los caracteres en el nombre de la rama en OS X. Cambiarlos resolvió el problema.
Steven C. Howell
Esto también puede suceder cuando tiene una rama anterior, digamos AM-xxx / some_branch, y luego crea otra AM-XXX / another_branch, git permitirá los casos diferentes localmente y no emparejará los dos de forma remota.
timpwbaker
Sí, es posible realizar el check out en el caso mixto equivocado, pero no el check in .
javadba
12

Git le permitirá verificar la rama actual con una carcasa diferente y no podrá encontrar una referencia en el control remoto.

Lo acabo de descubrir por las malas.

moggers
fuente
1
este era mi problema. Sugeriría hacer un rápido > git branchy verificar que su rama tenga un * al lado.
Andy Danger Gagne
Esto también me pasó a mí. @AndyDangerGagne, me alegra que hayas sugerido esto: no había * al lado de la rama en la que estaba, así que lo revisé nuevamente, esta vez en minúsculas.
Cognitiaclaeves
9

A mí me pasó algo parecido. Creé una rama llamada algo así como "Feat / name". Traté de empujarlo usando:

git push --set-upstream origin Feat / name

Recibí el mismo error fatal que tú:

fatal: la hazaña / nombre no se puede resolver para bifurcar

Para solucionarlo, creé una nueva rama ya que tenía muy pocos archivos afectados. Luego enumeré mis ramas para eliminar la incorrecta y se mostró sin límite:

  • hazaña / nombre

Había usado mayúsculas antes, pero nunca en el primer carácter. Parece que a git no le gusta ...

JGL
fuente
Tuve el mismo caso THX: D
abdoutelb
5

Es sensible a mayúsculas y minúsculas, solo asegúrese de que la sucursal creada y la inserción de la sucursal estén en la misma capital.

Ejemplo:

git checkout -b "TASK-135-hello-world"

Manera INCORRECTA de hacer:

git push origin task-135-hello-world     #FATAL: task-135-hello-world cannot be resolved to branch

Manera CORRECTA de hacer:

git push origin TASK-135-hello-world
Sher
fuente
2

¿Quizás olvidó ejecutar git fetch? ¡Se requiere para obtener datos del repositorio remoto! Intenta corrergit fetch remote/branch

bufón
fuente
2

Para mi caso, solía tener una carpeta de sucursales (o como se llame) con letras mayúsculas, luego creo una nueva con mayúsculas y minúsculas (minúsculas) pero git en realidad crea la sucursal con mayúsculas.

Creé una rama como feature-ABC/branch1antes y la empujé. Luego creo una rama feature-abc/branch2(observe el ABC en minúscula), e intento llevarla al uso remoto git push --set-upstream origin feature-abc/branch2y obtengo el error 'no se puede resolver para la rama'. Así que git branchveo que realmente creó en feature-ABC/branch2lugar de feature-abc/branch1para mí. Vuelvo a pagar con git checkout feature-ABC/feature2y lo presiono usando mayúsculas ( feature-ABC/feature2) para resolverlo.

Vee Trairattanapa
fuente
2

Enfrenté el mismo problema que se debió a la derivación con una carcasa incorrecta. git déjame cambiar a la rama con una carcasa incorrecta, es decir, en feature/Namelugar de feature/name. Encontré una solución más fácil que la enumerada anteriormente solo:

  • confirme sus cambios a 'función / nombre'
  • git checkout master (or develop)
  • git checkout feature/name <con carcasa correcta
  • git push
Corbin Hudson
fuente
2

Resolví esto en Windows 10 usando cmd en lugar de GitBash .

Tiene que ver con el caso del carácter y cómo git y las líneas de comando los manejan.

jmojico
fuente
1

Es posible que haya creado una rama similar pero diferente en cuanto a mayúsculas y minúsculas, luego debe ejecutar:

git branch -D <name-of-different-case-branch>

y luego intente presionar nuevamente.

loko
fuente
1

Respuesta ligeramente modificada de @Ty Le:

no se requirieron cambios en los archivos para mí: tenía una rama llamada 'Característica / ...' y mientras empujaba hacia arriba, cambié el título a 'característica / ...' (el caso de la primera letra se cambió a la inferior ).

Ryzhman
fuente
0

También tuve este problema y mis ramas normales comienzan con, pb-3.1-12345/namebranchpero accidentalmente escribí en mayúscula las primeras 2 letras PB-3.1/12345/namebranch. Después de cambiar el nombre de la rama para usar letras minúsculas, pude crear la rama.

Peter Boomsma
fuente
0

para mí estaba nombrando la rama como

Rel4.6 / bug / alguna-breve-descripción

todo lo que tenía que hacer era usar

git push origin R elx.x / bug / Una descripción breve

escribir

git push origin r elx.x / bug / Una descripción breve

como solía crear ramas usando la letra pequeña r en rel.

Entonces, ¿qué causó este problema?

cuando enumeré el .git/refs/headscontenido que encontré

drwxr-xr-x  4 eslam_khoga  staff   128B Sep 22 20:22 relx.x

pero no Relx.x!

y dentro bugy dentro bugdel nombre de mi rama.

Entonces, git intenta crear un directorio con el mismo nombre pero diferentes letras mayúsculas

pero el sistema no distingue entre mayúsculas y minúsculas.

¡Eso es lo que causó este problema!

KhogaEslam
fuente
0

Tuve el mismo problema con diferentes carcasas.

Hice una comprobación para el desarrollo (o maestro) y luego cambió el nombre (el nombre incorrecto) a algo más como prueba.

  • desarrollo de git checkout
  • git branch -m prueba de nombre incorrecto

luego cambie el nombre de nuevo al nombre correcto

  • git branch -m test right-name

luego realice el pago en la rama del nombre correcto

  • git checkout right-name

luego funcionó para empujar a la rama remota

  • git push origin right-name
Jim Nervall
fuente
0

Para mí, el problema era que tenía git y mi sistema de archivos macOS configurado en dos sensibilidades de mayúsculas y minúsculas diferentes. Mi Mac tenía el formato APFS / distingue entre mayúsculas y minúsculas : NO, pero cambié mi configuración de git en algún momento tratando de superar un problema extraño con la nomenclatura de activos de imagen de Xcode, por lo que git config --global core.ignorecase false . Al voltearlo hacia atrás, alineé la configuración y recreando la rama y empujando me volvió a encarrilar.

git config --global core.ignorecase true

Crédito: https://www.hanselman.com/blog/GitIsCasesensitiveAndYourFilesystemMayNotBeWeirdFolderMergingOnWindows.aspx

Miguel
fuente
0

Tuve el mismo problema pero se resolvió. Me di cuenta de que el nombre de la rama distingue entre mayúsculas y minúsculas. La rama principal en GitHub es 'maestra', mientras que en mi comando gitbash es 'Maestra'. Cambié el nombre de Master en el repositorio local a master y funcionó. 😀😀

Waswa Rodgers
fuente
0

Me encontré con el mismo problema y noté que había mezclado la carcasa mientras revisaba la rama. Verifiqué en branchNamelugar de BranchNamey cuando intenté presionar al control remoto, obtuve el mismo error.

La solución:

git push --set-upstream origin BranchName

Al configurar upstream con el nombre correcto, la rama correcta se actualizó en github y luego pude verificar el nombre de rama correcto con

git checkout BranchName 

Y debería estar actualizado con su último impulso.

bediV5
fuente
-1

Si se encuentra en una sucursal local, podría cambiar el nombre de la sucursal "Característica / Nombre" a "Característica / Nombre"

git -m feature/Name

si tiene problemas para realizar un git pushpago en otra rama (ex desarrollo) y volver a la rama renombrada

git checkout feature/Name

y vuelve a intentar tu git push

Ronaldo Albertini
fuente