Mi amigo y yo tenemos un repositorio que él creó. Luego creó una rama llamada “lexer” para que trabajáramos.
El problema es que, si bien puede alternar entre maestro y lexer, a mí no me funciona en absoluto.
Eventualmente comencé de nuevo (rm -rf repo
y luego clonó el repositorio) pero aún es imposible verificar la rama lexer?
En un repositorio recién clonado:
git branch
da:
$ git branch
* master
git checkout lexer
da:
$ git checkout lexer
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
¿PUEDO pagar origin/lexer pero termino en un estado HEAD desconectado?
$ git checkout origin/lexer master
Note: checking out 'origin/lexer'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
Es posible para mí empujar a la rama lexer haciendo
git push origin HEAD:lexer
pero bueno, realmente me gustaría arreglar este lío. ¿Es tan raro que a él le funcione pero a mí no? Dice que tampoco tiene cambios locales del repositorio de git …
¿Alguien tiene alguna pista?
Voy a aventurarme a adivinar que tienes un directorio llamado lexer
en el nivel superior. Ya que git checkout
se usa tanto para cambiar de rama como para restablecer archivos en el árbol, probablemente esté detectando que no tienes una rama llamada lexer
pero sí tiene un camino y selecciona el segundo modo. Le funciona a tu amigo porque ya tiene un lexer
rama.
La solución más fácil es probablemente crear la rama usando git branch
en cambio.
git branch --track lexer origin/lexer
debería hacer eso por ti. A continuación, puede utilizar git checkout
para cambiar a él.
Otra opción podría ser utilizar el --
marcar para git checkout. No lo he probado pero creo que debería funcionar:
git checkout lexer --
cuando agregas --
la palabra anterior siempre se considera una rama/confirmación/árbol y la palabra posterior a una ruta.
-
La primera solución también funciona si hay una rama y una etiqueta con el mismo nombre.
– mjobrien
14 de julio de 2017 a las 14:48
-
Esto funcionó para mí, pero todavía no sé dónde estaba el conflicto. Creé una nueva rama para conservar mis cambios actuales, presioné a mi control remoto, rm -rf’d todo. Reclonado, buscado, verificado mi rama creada recientemente a través de
git checkout origin/recently-created-branch
y pluma, CABEZA separada. Tu primera sugerencia me arregló todo de inmediato.– Shadoninja
16/10/2017 a las 17:50
-
me he estado preguntando que
--
lo hace en los comandos de git desde hace un año. ¡Gracias!– GrayedFox
17 de julio de 2018 a las 13:15
-
Me encontré con esto, sin un directorio en conflicto con el mismo nombre. El segundo comando permitiría el pago, pero aún con HEAD separado. La primera (para agregar información de seguimiento) es la respuesta correcta. Otra variante útil:
git checkout -t origin/lexer
. ¡Gracias!– geipel
16 abr 2019 a las 21:04
-
git branch –track lexer origin/lexer funciona para mí
–Yang Wang
4 de abril de 2020 a las 1:18
Probablemente quieras esto:
git checkout -t origin/lexer
Del manual de git:
Por comodidad, –track sin -b implica la creación de una rama…
y
-t, –track… Al crear una nueva rama, configure la configuración “upstream”… Si no se proporciona la opción -b, el nombre de la nueva rama se derivará de la rama de seguimiento remoto
-
Esto siempre funciona, si lo usó por primera vez en un nuevo repositorio, de lo contrario, mostrará un mensaje fatal: una rama llamada …… etc.
– El exorcista
11 de febrero de 2020 a las 13:21
-
¡Síiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii *1e6
– scrat.squirrel
9 oct 2020 a las 15:16
phil h
TLDR: Esto podría ser solo un sintaxis tema. En vez de
git checkout origin/mybranch
Probar:
git checkout mybranch
Los pasos que toma git, dado el siguiente comando:
git checkout origin/mybranch
- git busca una rama llamada ‘origin/mybranch’ en el repositorio local.
- Al no encontrarlo, buscará una rama llamada ‘origin/mybranch’ en los remotos disponibles.
- Al no encontrar eso tampoco, intenta tratarlo como una etiqueta de confirmación y encuentra la etiqueta ‘origin/mybranch’ contra una confirmación específica. Comprueba ese compromiso por usted, en un estado separado.
¡Pero eso no era lo que querías! Querías la rama llamada ‘mybranch’. Si solo hay un control remoto con tal rama (y nada localmente para confundir las cosas), entonces git asumirá que te refieres a este uso, completando <remote>
para ti:
git checkout -b <branch> --track <remote>/<branch>
Si no puede encontrar una rama con el nombre que coincida, lo predeterminado es esto:
git checkout [--detach] <commit>
Que es donde entra el mensaje HEAD separado.
Ver los documentos de pago de gity preste atención a <branch>
contra <remote>
.
-
este era mi problema
– JobHunter69
17 de agosto de 2020 a las 16:31
-
esto me llevó una eternidad darme cuenta
– LuXxenatorX
23 de septiembre de 2020 a las 10:41
-
estos fueron mis problemas, tuve que eliminar controles remotos/origen
– SSS
3 de noviembre de 2020 a las 19:12
Felipe
no puedes pagar lexer
porque no tiene la rama en su repositorio local (y seguramente una carpeta con el mismo nombre). Solo tiene la rama remota ‘origin/lexer’. Primero tienes que crear la sucursal local:
git checkout -b lexer origin/lexer
Una buena explicación sobre el tema: https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches
Entras en un estado de CABEZA separada porque origin/lexer
es una rama de seguimiento remoto y, por lo tanto, solo de lectura. Solo quieres pagar lexer
, y haz tu trabajo en eso. Entonces, cuando empujas, origin/lexer
se pondrá al día.
Editar: Al volver a leer su pregunta, veo que ha intentado pagar lexer, pero termina quedándose en maestro. es extraño que git checkout
está fallando en silencio. Probar git checkout -t origin/lexer
.
cristiano
Otra suposición descabellada: tiene una etiqueta con el mismo nombre, así que
git checkout lexer
en realidad revisa la etiqueta, no la rama
Comunidad
Cuando tu lo hagas: git checkout origin/lexer master
simplemente cambias tu HEAD
para apuntar a la última confirmación en nuestro remote
rama. Es una rama de solo lectura.
Si deseas entender qué es HEAD, lee esto:
¿Cómo mover HEAD a una ubicación anterior? (Cabeza separada)
En tu caso simplemente necesitas hacer lo siguiente:
Actualice su repositorio con el código más reciente con todas las ramas y etiquetas
# Update your local repository with all the remote branches
# --prune = remove all deleted data locally which was removed on the remote
git fetch --all --prune
Ahora deberías tener las últimas sucursales a nivel local.
Eliminar la antigua sucursal local
!!! IMPORTANTE:
Si realizó modificaciones y no las presionó, no elimine la rama local
git branch -D lexer
Consulte la sucursal deseada
# don't use the remote simply the branch name
git checkout lexer
Ahora tiene una sucursal local con el nombre lexer extraído de su sucursal remota