¿Cómo reviso una rama remota de Git?
Alguien empujó una rama llamada test
a git push origin test
un repositorio compartido. Puedo ver la rama con git branch -r
. ¿Cómo reviso la test
sucursal remota? He intentado:
git checkout test
, que no hace nadagit checkout origin/test
da* (no branch)
La respuesta se ha dividido dependiendo de si hay un repositorio remoto configurado o varios. La razón de esto es que para el caso remoto único, algunos de los comandos se pueden simplificar ya que hay menos ambigüedad.
Actualizado para Git 2.23: para versiones anteriores, consulte la sección al final.
Con un control remoto
En ambos casos, comience por buscar desde el repositorio remoto para asegurarse de haber descargado todos los cambios más recientes.
$ git fetch
Esto buscará todas las sucursales remotas por usted. Puedes ver las sucursales disponibles para pagar con:
$ git branch -v -a
...
remotes/origin/test
Las ramas que comienzan con remotes/*
pueden considerarse copias de solo lectura de las ramas remotas. Para trabajar en una sucursal, necesita crear una sucursal local a partir de ella. Esto se hace con el comando Git switch
(desde Git 2.23) dándole el nombre de la rama remota (menos el nombre remoto):
$ git switch test
En este caso, Git adivina (se puede desactivar con --no-guess
) que está intentando realizar el pago y realizar un seguimiento de la rama remota con el mismo nombre.
Con múltiples controles remotos
En el caso de que existan varios repositorios remotos, el repositorio remoto debe tener un nombre explícito.
Como antes, comience recuperando los últimos cambios remotos:
$ git fetch origin
Esto buscará todas las sucursales remotas por usted. Puedes ver las sucursales disponibles para pagar con:
$ git branch -v -a
Con las sucursales remotas en la mano, ahora necesita verificar la sucursal que le interesa -c
para crear una nueva sucursal local:
$ git switch -c test origin/test
Para obtener más información sobre el uso git switch
:
$ man git-switch
Antes de Git 2.23
git switch
se agregó en Git 2.23, antes de esto git checkout
se usaba para cambiar de rama.
Para realizar el pago con un solo repositorio remoto:
git checkout test
si hay varios repositorios remotos configurados, el tiempo será un poco más largo
git checkout -b test <name of remote>/test
Nota al margen: con Git moderno (>= 1.6.6 ), puedes usar solo
git checkout test
(tenga en cuenta que es 'prueba', no 'origen/prueba') para realizar DWIM -mery mágico y crear una rama local 'prueba' para usted, para lo cual el flujo ascendente sería la rama 'origen/prueba' de seguimiento remoto.
La salida * (no branch)
in git branch
significa que está en una rama sin nombre, en el llamado estado "HEAD separado" (HEAD apunta directamente a la confirmación y no es una referencia simbólica a alguna rama local). Si realizó algunas confirmaciones en esta rama sin nombre, siempre puede crear una rama local a partir de la confirmación actual:
git checkout -b test HEAD
Un enfoque más moderno como se sugiere en los comentarios:
@Dennis:,
git checkout <non-branch>
por ejemplo,git checkout origin/test
da como resultado una rama HEAD/sin nombre separada, mientras quegit checkout test
o da comogit checkout -b test origin/test
resultado una rama localtest
(con una rama de seguimiento remotoorigin/test
como ascendente ) – Jakub Narębski 09 enero 2014 en el 08:17
enfásis engit checkout origin/test
En este caso, probablemente desee crear una test
sucursal local que rastree la test
sucursal remota:
$ git branch test origin/test
En versiones anteriores de git
, necesitaba una --track
opción explícita, pero esa es la opción predeterminada ahora cuando se bifurca desde una rama remota.
Para crear la sucursal local y cambiar a ella, use:
$ git checkout -b test origin/test
¿ La respuesta aceptada no te funciona?
Si bien la primera respuesta seleccionada es técnicamente correcta , existe la posibilidad de que aún no haya recuperado todos los objetos y referencias del repositorio remoto. Si ese es el caso, recibirá el siguiente error:
$ git checkout -b remote_branch origin/remote_branch
fatal: git checkout: actualizar rutas es incompatible con cambiar de rama.
¿Tenía la intención de verificar 'origin/remote_branch' que no se puede resolver como confirmación?
Solución
Si recibe este mensaje, primero debe buscar git fetch origin
dónde origin
está el nombre del repositorio remoto antes de ejecutar git checkout remote_branch
. Aquí hay un ejemplo completo con respuestas:
$ git fetch origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
e6ef1e0..5029161 develop -> origin/develop
* [new branch] demo -> origin/demo
d80f8d7..359eab0 master -> origin/master
$ git checkout demo
Branch demo set up to track remote branch demo from origin.
Switched to a new branch 'demo'
Como puede ver, la ejecución git fetch origin
recuperó las sucursales remotas que aún no estábamos configurados para rastrear en nuestra máquina local. A partir de ahí, dado que ahora tenemos una referencia a la rama remota, simplemente podemos ejecutarla git checkout remote_branch
y obtendremos los beneficios del seguimiento remoto.
Probé la solución anterior, pero no funcionó. Prueba esto, funciona:
git fetch origin 'remote_branch':'local_branch_name'
Esto buscará la sucursal remota y creará una nueva sucursal local (si aún no existe) con el nombre local_branch_name
y rastreará la remota en ella.