"No se pueden actualizar las rutas y cambiar a sucursal al mismo tiempo"

186

A veces uso la checkout -bopción para crear una nueva sucursal, verificarla al mismo tiempo y configurar el seguimiento en un comando.

En un nuevo entorno, me sale este error:

$ git checkout -b test --track origin/master
fatal: Cannot update paths and switch to branch 'test' at the same time.
Did you intend to checkout 'origin/master' which can not be resolved as commit?

¿Por qué a Git no le gusta? Esto solía funcionar con el mismo repositorio.

marekful
fuente
66
El mensaje de error le dice que origin/masterno es una ID de confirmación, es decir, que no es una rama remota válida. ¿Aparece en la git branch -rsalida?
torek
No lo hizo. Resulta que no revisé todas las ramas remotas durante el clon.
marekful
posible duplicado de pago Git en una sucursal remota no funciona
JuJoDi

Respuestas:

199

' origin/master' que no se puede resolver como commit

Extraño: necesitas revisar tus controles remotos:

git remote -v

Y asegúrese de originobtenerlo:

git fetch origin

Luego:

git branch -avv

(para ver si ha obtenido una origin/masterrama)

Finalmente, use en git switchlugar de lo confusogit checkout , con Git 2.23+ (agosto de 2019).

git switch -c test --track origin/master
VonC
fuente
11
Tenía un error tipográfico en mi comando que activó este error; ¡No estaba deletreando mi control remoto correctamente!
qix
2
Era una nueva sucursal y mi repositorio local no lo sabía. Tuve que hacer un pully luego este comando funcionó.
coding_idiot
2
Esta respuesta fue útil porque me mostró que realmente está sucediendo algo extraño: los controles remotos están configurados correctamente, pero la nueva rama remota simplemente no se obtiene. Cuando clono el control remoto en un directorio limpio, funciona. ¿Podría mi .gitdirectorio estar de alguna manera corrupto?
Konrad Rudolph
git remote -v devolvió este error fatal: No es un nombre de objeto válido: 'remoto'.
Karim Samir
@KarimSamir puede hacer una pregunta por separado (con su sistema operativo y la versión de git), ya que se git remote -vejecuta en un repositorio de git.
VonC
79

FWIW: Si tiene un error tipográfico en su nombre de sucursal, obtendrá este mismo error.

Ludder
fuente
44
En realidad, sería bueno si alguien pudiera tomarse el tiempo para decirle a los desarrolladores de Git sobre esto, el mensaje de error no es muy informativo;)
Scorchio
8
sí, este era mi problema, tenía un espacio en el nombre de mi sucursal
Karim Samir el
Lo mismo aquí, estaba intentando en git checkout -b origin mybranchlugar de git checkout -b mybranch(extra origin)
Guillaume Renoult
Copié y pegué el nombre de mi sucursal y tuve un espacio en blanco al final del nombre de la sucursal que causó este error.
learningKnight
Estaba tratando de pagar en orgin/my-branchlugar de origin/my-branch. Perdí uno iy me rasqué la cabeza por un tiempo para entender por qué un viejo aliado se niega a llevarse bien. El error tipográfico fue el problema.
DDM
55

Puede obtener este error en el contexto de, por ejemplo, una compilación de Travis que, de forma predeterminada, comprueba el código git clone --depth=50 --branch=master. Que yo sepa, puede controlar a --depthtravés de, .travis.ymlpero no a través de --branch. Como eso da como resultado que solo una rama sea rastreada por el control remoto, debe actualizar de forma independiente el control remoto para rastrear las referencias del control remoto deseado.

Antes de:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

La solución:

$ git remote set-branches --add origin branch-1
$ git remote set-branches --add origin branch-2
$ git fetch

Después:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-1
remotes/origin/branch-2
remotes/origin/master
Bob Aman
fuente
55
Lo resolvió por mí. Utilicé un clon superficial --depth = 1 y esto es lo que necesitaba para cambiar de rama.
Sawtaytoes
1
Gah, sí, ¡lo de la profundidad definitivamente resulta en este error! Si es posible, sugeriría que las primeras oraciones sean editadas para enfatizar la profundidad.
Dubslow
19

¡Esta cosa simple funcionó para mí!

Si dice que no puede hacer 2 cosas al mismo tiempo, sepárelas.

git branch branch_name origin/branch_name 

git checkout branch_name
Ashwini Reddy
fuente
Facilita descubrir cuál es el verdadero problema
Z. Khullah
9

Podrías seguir estos pasos cuando te topes con este problema:

  1. Ejecute el siguiente comando para enumerar las ramas conocidas para su repositorio local.

origen de show remoto git

que produce esto:

 remote origin
  Fetch URL: <your_git_path>
  Push  URL: <your_git_path>
  HEAD branch: development
  Remote branches:
    development                             tracked
    Feature2                                tracked
    master                                  tracked
    refs/remotes/origin/Feature1         stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    Feature2     merges with remote Feature2
    development  merges with remote development
    master       merges with remote master
  Local refs configured for 'git push':
    Feature2     pushes to Feature2     (up to date)
    development  pushes to development (up to date)
    master       pushes to master      (local out of date)
  1. Después de verificar los detalles como (buscar URL, etc.), ejecute este comando para obtener cualquier rama nueva (es decir, que desee desproteger en su repositorio local) que exista en el remoto pero no en su local.
» git remote update

Fetching origin
From gitlab.domain.local:ProjectGroupName/ProjectName
 * [new branch]      Feature3    -> Feature3

Como puede ver, la nueva rama se ha obtenido desde el control remoto.
3. Finalmente, revisa la rama con este comando

» git checkout -b Feature3 origin/Feature3

Branch Feature3 set up to track remote branch Feature3 from origin.
Switched to a new branch 'Feature3'

No es necesario decirle explícitamente a Git que rastree (usando --track ) la rama con control remoto.

El comando anterior configurará la rama local para rastrear la rama remota desde el origen.

ssasi
fuente
4

Si tiene espacio en blanco en su rama, obtendrá este error.

Dansek
fuente
1

Para mí necesitaba agregar el control remoto:

git remote -add myRemoteName('origin' in your case) remoteGitURL

entonces podría ir a buscar

git fetch myRemoteName
RayLoveless
fuente
1

Hace que su sucursal local no rastree la sucursal remota. Como dijo ssasi, debe usar estos comandos:

git remote update
git fetch
git checkout -b branch_nameA origin/branch_nameB

Resolví mi problema justo ahora ...

questionKing
fuente
0

Primero necesita Fetchel control remoto (la rama específica), luego puede crear un br local y rastrearlo con esa rama remota usando su comando (es decir, checkoutcon -b y --track).

Raheel Hasan
fuente
0

Debe ir al directorio de submódulos y ejecutar git status.

Es posible que vea que se eliminaron muchos archivos. Puedes correr

  1. git reset .

  2. git checkout .

  3. git fetch -p

  4. git rm --cached submodules // submoudles es tu nombre

  5. git submoudle add ....

caballero2016
fuente
0

Puede usar estos comandos: actualización remota de git, captación de git, verificación de git -b nombre_de_ rama A origen: nombre_de_ rama B

Creo que tal vez sea porque su sucursal local no puede rastrear la sucursal remota

kang
fuente