Comprobación de Git: la actualización de rutas es incompatible con el cambio de ramas


467

Mi problema esta relacionado con error Fatal Git al cambiar de rama .

Intento buscar una rama remota con el comando

git checkout -b local-name origin/remote-name

pero recibo este mensaje de error:

fatal: git checkout: la actualización de rutas es incompatible con el cambio de ramas.
¿Tenía la intención de pagar 'origen / nombre remoto' que no se puede resolver como commit?

Si creo manualmente una rama y luego extraigo la rama remota, funciona, al igual que hacer un nuevo clon y verificar la rama.

¿Por qué no funciona en el repositorio con el que trabajo?


1
¿Qué ha cambiado desde la primera instancia de ese comando (desencadenando el mensaje de error)?
— VonC

git init git fetch git fetch git: //blabla.com/dir1/Project.git

Respuestas:


739

Creo que esto ocurre cuando estás tratando de pagar una rama remota que tu repositorio local de git aún no conoce. Tratar:

git remote show origin

Si la rama remota que desea pagar está en "Nuevas ramas remotas" y no en "Ramas remotas rastreadas", primero debe buscarlas:

git remote update
git fetch

Ahora debería funcionar:

git checkout -b local-name origin/remote-name

77
Esto resolvió el problema para mí, no la respuesta arbitraria anterior.
— Jessedc

21
Debe ser "git fetch REPOSITORY_NAME" para obtener todas las ramas en ese repositorio.
— Mike Thomsen

1
no necesariamente. git fetchobtendrá todas las ramas de todos los repositorios remotos.
— Michael Grinich

44
En caso de que alguien más tenga problemas con la locura de todo esto: git fetch origin / branchname No es lo mismo que git fetch. El primero simplemente da como resultado que se muestre "nuevo (la siguiente búsqueda se almacenará en control remoto / origen)" en una columna visible a través de git remote show origin.
— Alexander Kellett el

77
Si está tratando de hacer esto para un control remoto que agregó explícitamente (por lo tanto, cualquier cosa que no sea el origen ) deberá hacerlo git remote updateantes de que su búsqueda recupere ese control remoto. De lo contrario, recibirá mensajes como Did you intend to checkout 'upstream-repo/master' which can not be resolved as commit?Agregue esto a la respuesta y ahorre a las personas horas de leer las mismas respuestas que solo funcionan para el origen.
— Bruno Bronosky

150

Sintaxis alternativa,

git fetch origin remote_branch_name:local_branch_name

12
Esto funcionó para mí. El nombre de mi sucursal remota no es origen. No sé si eso hace la diferencia ya que he estado bebiendo vodka.
— Rimian

13
Esto no es sólo una sintaxis alternativa, pero puede funcionar cuando git checkout -b branch_name origen / branch_name qué no funciona
— codercake

1
Esto también solucionó mi problema al ejecutar "git checkout --track origin / remote-branch", que originalmente daba el mismo error que los OP antes de la corrección. ¡Gracias!
— kakyo

1
Me funcionó después de ejecutar también la respuesta validada.
— AsTeR

2
Sí, sospecho que el --depthcalificador para el clon original puede tener la culpa aquí. Tuve éxito con git fetch remote_branch_name:local_branch_namepero todos los otros consejos fallaron.
— John Kelleher

46

Después de haber probado la mayor parte de lo que podía leer en este hilo sin éxito, me topé con este: la rama remota no aparece en "git branch -r"

Resultó que mi archivo .git / config era incorrecto. Después de hacer una solución simple, aparecieron todas las ramas.

Ir desde

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

a

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Hizo el truco


44
De hecho, esa es una configuración extraña. Le dice a git que solo busque la rama maestra del control remoto.
— Ikke

3
¡Lo votaría 10 veces si pudiera! - Esto parece ser algo que el nuevo git hace cuando
— clona

2
Tuve el mismo problema, me estaba volviendo loco. Alguien que no vea sucursales remotas, por favor verifique esto
— Carlos Granados

Gracias a Dios por tu respuesta :)
— Sacha

Mente = soplado! ¡Gracias!
— Chiranjib

12

No estoy seguro de si esto es útil o exactamente relevante para su pregunta, pero si está tratando de obtener y pagar solo un solo ramal desde el repositorio remoto, a continuación, los siguientes comandos git hará el truco:

url= << URL TO REPOSITORY >>
branch= << BRANCH NAME >>

git init
git remote add origin $url
git fetch origin $branch:origin/$branch
git checkout -b $branch --track origin/$branch

11

ninguno de los anteriores funcionó para mí. Mi situación es ligeramente diferente, mi rama remota no está en origen . pero en un repositorio diferente.

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname

Consejo: si no ve la rama remota en la siguiente salida, git branch -v -ano hay forma de verificarla.

Confirmado trabajando en 1.7.5.4


¡Arf, solo date cuenta de que VirtualStaticVoid tenía la misma solución!
— Olivier Refalo

+1 para git branch -v -a: Tenía un control remoto configurado incorrectamente que decía fetch = +refs/heads/*:refs/remotes/master/*aunque se llamó al control remoto upstream.
— keflavich

7

Para mí lo que funcionó fue:

git fetch

Lo que lleva todas las referencias a su máquina para todas las ramas en el control remoto. Entonces podría hacer

git checkout <branchname>

Y eso funcionó perfectamente. Similar a la respuesta más votada, pero un poco más simple.


4

Sospecho que no hay una rama remota llamada nombre-remoto, pero que sin querer ha creado una rama local llamada origen / nombre-remoto.

¿Es posible que en algún momento escribiste:

origen de rama git / nombre remoto

¿Creando así una rama local llamada origen / nombre remoto? Escriba este comando:

origen de pago git / nombre remoto

Verás:

Cambió a la rama "origen / nombre remoto"

lo que significa que es realmente una rama local mal nombrada, o

Nota: pasar a "origen / retrabajo-emisión" que no es una sucursal local
Si desea crear una nueva sucursal a partir de este pago, puede hacerlo
(ahora o más tarde) usando -b con el comando de pago nuevamente. Ejemplo:
  git checkout -b 

lo que significa que realmente es una rama remota.


3

No es muy intuitivo, pero esto funciona bien para mí ...

  mkdir remote.git & cd remote.git & git init
  git remote add origin $REPO
  git fetch origin $BRANCH:refs/remotes/origin/$BRANCH        

ENTONCES ejecute el comando git branch --track ...

  git branch --track $BRANCH origin/$BRANCH

2

Para mí tenía un error tipográfico y mi rama remota no existía

Use git branch -apara enumerar ramas remotas


1

¿Podría su problema estar vinculado a esta otra pregunta SO "problema de pago" ?

es decir: un problema relacionado con:

  • una versión antigua de Git
  • una curiosa sintaxis de pago, que debería ser:, git checkout -b [<new_branch>] [<start_point>]con [<start_point>]referencia al nombre de una confirmación en la que iniciar la nueva rama, y 'origin/remote-name'no es eso.
    (mientras git branchque admite un punto_inicial siendo el nombre de una rama remota)

Nota: lo que dice el script checkout.sh es:

  if test '' != "$newbranch$force$merge"
  then
    die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
  fi

Es como si la sintaxis git checkout -b [] [remote_branch_name] cambiara el nombre de la rama y restableciera el nuevo punto de inicio de la nueva rama, que se considera incompatible.


El problema esta resuelto. git checkout -b-nombre local remoto / mando a distancia-rama funciona realmente
— Zona no

1
Interesante, ¿qué ha cambiado desde la primera instancia de ese comando (desencadenando el mensaje de error)?
— VonC

1

Después de buscar un millón de veces, todavía no se mostraban controles remotos agregados, aunque los blobs estaban en el grupo. Resulta que la opción --tags no se debe dar agit remote add por cualquier razón. Puede eliminarlo manualmente de .git / config para que git fetch cree las referencias.

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.