2009-06-03 14 views
447

Mi problema está relacionado con Fatal Git error when switching branch.Comprobación de Git: las rutas de actualización no son compatibles con las ramas de conmutación

trato de buscar una rama remota con el comando

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

pero me sale este mensaje de error:

fatal: git checkout: la actualización de los caminos es incompatible con el cambio ramas.
¿Tiene previsto realizar el pago 'origin/remote-name' que no puede resolverse como commit?

Si creo manualmente una bifurcación y luego selecciono la bifurcación remota, funciona igual que hacer una nueva copia y verificar la bifurcación.

¿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

+0

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

Respuesta

721

Creo que esto ocurre cuando intentas pagar una sucursal remota de la que todavía no tienes conocimiento. Proveedores:

git remote show origin 

Si la rama remota que desea para la obtención se encuentra bajo "Nuevas sucursales remotas" y no "sucursales remotas de oruga", entonces tendrá que obtener primero:

git remote update 
git fetch 

Ahora debería funcionar :

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

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

+21

Debería ser "git fetch REPOSITORY_NAME" para obtener todas las ramas en ese repositorio. –

+1

no necesariamente. 'git fetch' obtendrá todas las ramas de todos los repos remotos. –

1

¿Podría relacionar su problema con esta otra pregunta AS? "checkout problem"?

es decir: un problema relacionado con:

  • una versión antigua de Git
  • una sintaxis de la caja curiosa, que debe ser: git checkout -b [<new_branch>] [<start_point>], con [<start_point>] referencia al nombre de un cometen en que debe comenzar la nueva sucursal, y 'origin/remote-name' no es eso.
    (mientras git branch hace soportar una punto_inicial ser el nombre de una rama remota)

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

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

Es como el git checkout -b sintaxis [] [ remote_branch_name] cambiaba el nombre de la bifurcación y restablecía el nuevo punto de inicio de la nueva bifurcación, que se considera incompatible.

+0

El problema está resuelto. git checkout -b nombre-local remote/remote-branch realmente funciona – Ikke

+1

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

144

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 una diferencia ya que he estado bebiendo vodka. – Rimian

+12

Esto no es solo una sintaxis alternativa, pero puede funcionar cuando git checkout -b branch_name origin/branch_name no funciona – codercake

+0

omg! fnx! me salvaste de un dolor de cabeza! git remote update && git fetch no funcionó para mí - no vi otras ramas ... –

3

Sospecho que no existe una rama remota llamada remote-name, pero que ha creado inadvertidamente una rama local llamada origin/remote-name.

¿Es posible que en algún momento proporcionado:

 
git branch origin/remote-name 

lo tanto la creación de una rama local llamado origen/remoto nombre? Escriba este comando:

 
git checkout origin/remote-name 

verá la opción:

 
Switched to branch "origin/remote-name" 

que significa que es en realidad una rama local mal llamado, o

 
Note: moving to "origin/rework-isscoring" which isn't a local branch 
If you want to create a new branch from this checkout, you may do so 
(now or later) by using -b with the checkout command again. Example: 
    git checkout -b 

lo que significa que realmente es un mando a distancia rama.

12

No estoy seguro si esto es útil o exactamente relevante a su pregunta, pero si usted está tratando de traer y de pago sólo una única rama 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 -a no hay manera de comprobarlo.

confirmó que trabaja en 1.7.5.4

+0

arf, ¡simplemente date cuenta de que VirtualStaticVoid tenía la misma solución! –

+0

+1 para 'git branch -v -a': tenía un control remoto configurado incorrectamente que decía' fetch = + refs/heads/*: refs/remotes/master/* 'aunque el control remoto se llama' upstream'. – keflavich

+0

Funciona, gracias – wukong

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   

A continuación, ejecute el comando git branch --track ...

git branch --track $BRANCH origin/$BRANCH 
7

Para mí lo que funcionó fue:

git fetch 

Lo que hace que todos los refs bajen 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 votado, pero un poco más simple.

1

Después de recuperar un trillón de veces aún no se muestran los controles remotos, aunque los blobs estaban en el grupo. Resulta que la opción --tags no se debe dar al git remote add por ningún motivo. Puedes eliminarlo manualmente de .git/config para hacer que git fetch cree los refs.

41

Después de haber probado la mayoría de lo que he podido leer en este hilo sin éxito, me encontré con ésta: Remote branch not showing up in "git branch -r"

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

Yendo de

[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

+4

Esa es de hecho una configuración extraña. Le dice a git que solo busque la rama principal desde el control remoto. – Ikke

+3

¡Lo votaría 10 veces si pudiera! - Esto parece ser algo que el nuevo git hace cuando clonaba – mpapis

+2

. Tuve el mismo problema, me estaba volviendo loco. ¡Cualquiera que no vea sucursales remotas, por favor revisa esto! –

0

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

Uso git branch -a a la lista sucursales remotas

Cuestiones relacionadas