¿Cómo verifico una sucursal remota de Git?


6715

Alguien empujó una rama llamada testcon git push origin testun repositorio compartido. Puedo ver la rama con git branch -r.

Ahora estoy tratando de revisar la testrama remota .

He intentado:

  • git checkout test que no hace nada

  • git checkout origin/testda * (no branch). Lo cual es confuso. ¿Cómo puedo estar en "sin sucursal"?

¿Cómo verifico una sucursal remota de Git?


99
@inger Pero no incluye la posibilidad de cambiar el nombre de la nueva sucursal local (si desea - configurar upstream más adelante y mantener la coherencia de los nombres)
fachexot

15
Creo que este hilo no es útil. Nada parece funcionar, la pregunta original parece haberse perdido en muchas de las respuestas. Leí cada palabra, probé todo lo que sigue y no tengo idea de cómo hacer lo que el OP quiere hacer.
Tony Ennis

66
Para empezar, los comandos Git no son intuitivos, agregue los cambios introducidos con versiones recientes a la mezcla y tendrá esta página ...
Christophe Roussy

14
Siento que estoy tomando pastillas locas. Estoy tratando de sacar una rama de un upstream, no solo origin, y cada respuesta recomendada no hace nada remotamente útil (juego de palabras). EDITAR : disculpe, la multitud de sugerencias contenidas en las 2 respuestas principales fueron inútiles; El tercero ( git branch test origin/test) es lo que funciona. Me alegro de que los 2 primeros tengan 20
veces más

44
Tal vez tenga un archivo llamado 'prueba' en su árbol de trabajo, consulte stackoverflow.com/a/45006389/792416 para más detalles.
oldman

Respuestas:


9151

Actualizar

La respuesta de Jakub en realidad mejora esto. Con las versiones de Git ≥ 1.6.6, con un solo control remoto, solo puede hacer:

git fetch
git checkout test

Como el usuario masukomi señala en un comentario, git checkout testNO funcionará en git moderno si tiene múltiples controles remotos. En este caso use

git checkout -b test <name of remote>/test

o la taquigrafía

git checkout -t <name of remote>/test

Vieja respuesta

Antes de que pueda comenzar a trabajar localmente en una rama remota, debe buscarla como se indica en las respuestas a continuación.

Para buscar una rama, simplemente necesita:

git fetch origin

Esto buscará todas las ramas remotas para usted. Puede ver las sucursales disponibles para pagar con:

git branch -v -a

Con las sucursales remotas en la mano, ahora debe verificar la sucursal que le interesa y obtener una copia de trabajo local:

git checkout -b test origin/test

398
Para ampliar esto: git no te permite trabajar en las ramas de otra persona. Solo puedes trabajar por tu cuenta. Entonces, si desea agregar a la rama de otra persona, debe crear su propia "copia" de esa rama, que es lo que hace el comando anterior (bueno, crea su rama y también la comprueba).
Dan Molding el

139
Si se trata de una nueva rama remota puede que tenga que git fetchantes de hacer esto para que Git es consciente deorigin/test
Neil Sarkar

56
... y que haría esto congit fetch origin test
Andrew

22
Error: "git checkout: la actualización de rutas es incompatible con el cambio de ramas. ¿Pretendía realizar un pago origin/testque no se puede resolver como commit?"
Xeoncross

85
git checkout testNO funcionará en git moderno si tiene múltiples controles remotos que tienen el mismo nombre de rama . No puede saber cuál usar.
masukomi

1256

Nota al margen: con Git moderno (> = 1.6.6 ), puede usar solo

git checkout test

(tenga en cuenta que es 'prueba' no 'origen / prueba') realizar un DWIM mágico -mery y crear una 'prueba' de sucursal local para usted, para lo cual aguas arriba sería una 'fuente / prueba' de seguimiento remoto.


El * (no branch)en git branchmedio de salida que son en la rama sin nombre, en el estado de la llamada "cabeza separada" (puntos se dirijan directamente a cometer, y no se hace 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

** EDITAR (por editor no autor) **

Encontré un comentario enterrado debajo que parece modernizar esta respuesta:

@Dennis: git checkout, por ejemplo, git checkout origin / prueba resultados en HEAD / rama sin nombre, mientras que git checkout test o git checkout -b test origen / prueba resultados en sucursal local (con origen / prueba de sucursal de seguimiento remoto como aguas arriba ) - Jakub Narębski 9 de enero de 14 a las 8:17

enfásis en git checkout origin/test


33
No es sorprendente, pero esta versión se ha lanzado en los últimos años: conocer esta sintaxis puede ahorrar mucho tiempo ya que todavía hay mucha documentación antigua y hilos de comentarios que sugieren el método más antiguo para hacerlo.
Curtis

10
"git moderno" - para el registro, (aproximadamente) ¿a qué versión te refieres? A veces tenemos que trabajar en sistemas que ejecutan distribuciones más antiguas.
Craig McQueen

55
"git moderno" en este contexto es git 1.6.6
Bobby Norton

10
@aidan Si obtiene una respuesta como error: pathspec 'branch_name' did not match any file(s) known to git.esta, primero debe hacer una búsqueda de git.
Dennis

66
Utilizando git versión 1.8.3.msysgit.0 y esto no funciona para mí, no coincidió con ningún archivo conocido por git. He realizado muchas
recuperaciones de

565

En este caso, probablemente desee crear una testsucursal local que esté rastreando la testsucursal remota :

$ git branch test origin/test

En versiones anteriores de git, necesitaba una --trackopción explícita , pero esa es la opción predeterminada ahora cuando se bifurca desde una rama remota.


15
Esto creará una rama local sin cambiar a ella.
Alex Skrypnyk

2
Aunque me puse fatal: Nombre de objeto ambiguo: 'origin / dev', donde definitivamente existe una rama 'dev' en el origen, pero accidentalmente creé una rama llamada "origin / dev" en mi máquina (en mis intentos estúpidos anteriores para hacerlo bien, sin duda) ... ay
PandaWood

1
Esto me ha estado dando el error de error: no se pudieron empujar algunas referencias para dar pistas: las actualizaciones se rechazaron porque una punta de rama empujada está detrás de su pista remota: contraparte. Eche un vistazo a esta rama y combine la sugerencia de cambios remotos: (por ejemplo, 'git pull') antes de presionar nuevamente. pista: vea la 'Nota sobre avance rápido' en 'git push --help' para más detalles.
pal4life

475

¿La respuesta aceptada no funciona para usted?

Si bien la primera y la 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: la actualización de rutas es incompatible con el cambio de ramas.
¿Tenía la intención de pagar 'origin / remote_branch' que no se puede resolver como commit?

Solución

Si recibe este mensaje, primero debe hacer un lugar git fetch origindonde originestá el nombre del repositorio remoto antes de ejecutarlo 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 originrecuperó cualquier rama remota que aún no habíamos configurado para rastrear en nuestra máquina local. A partir de ahí, dado que ahora tenemos una referencia a la rama remota, simplemente podemos ejecutar git checkout remote_branchy obtendremos los beneficios del seguimiento remoto.


2
Agregaré una nota si tiene una rama separada localmente: asegúrese de haber asociado esto con el repositorio remoto usando 'git remote add origin [the_path_to_your_repo / repo_name.git]'. Luego use 'git fetch origin' donde 'origin' significa el repositorio de origen con el que se ha asociado.
elliotrock

git checkout -b newbranchtambién funciona muy bien para crear y pagar en 1 paso una nueva sucursal basada en la rama actual.
Linus

2
Creo que este es el más actualizado (¡mantiene el cambio de $ @ #! Ing!). Git 2.5.5 Encontré que la única forma de ver realmente las ramas remotas era git ls-remotey la única manera de usar una es git checkout -b [branch] --track [remote/branch]... y eso fue después de git pull [remote] [branch] trabajar. Es decir, en realidad arrancó toda la rama, pero aún así no la enumeraría.
delicateLatticeworkFever

y cuando esta respuesta tampoco funciona, mira esta .
EIS

solo para agregar, si git fetch other_remote only_branchaún así, obtienes el fatalerror. Tienes que git fetch other_remotesin el nombre de la sucursal. Diseño raro
está

258

Intenté la solución anterior, pero no funcionó. Prueba esto, funciona:

git fetch origin 'remote_branch':'local_branch_name'

Esto buscará la rama remota y creará una nueva rama local (si aún no existe) con el nombre local_branch_namey rastreará la remota en ella.


37
Esto funcionó para mí cuando ni git fetch origin ni la actualización remota de git crearon sucursales locales. No estoy seguro de por qué.
Godsmith

44
Esta era la forma más directa de lograr lo que necesitaba, que era usar una rama remota (no maestra) para crear una nueva rama.
Roralee

77
Funcionó sin problemas, especialmente cuando se clonó una sola rama desde un control remoto con varias ramas.
Alex C

77
Esto también funcionó para mí, donde las respuestas aceptadas y otras votadas no lo hicieron. Mi versión git es 2.5.0
pdepmcp

55
¿Alguien tiene alguna idea de por qué esto funciona cuando todo lo demás no? (Estoy en git 2.13.0)
Nathan Arthur

108

Esto hará DWIM para un origen remoto no nombrado ( documentación ):

$ git checkout -t remote_name/remote_branch

Para agregar un nuevo control remoto, primero deberá hacer lo siguiente:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

El primero le dice a Git que el control remoto existe, el segundo obtiene los commits.


104

Utilizar:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

Otras respuestas no funcionan con Git moderno en mi caso benigno. Es posible que deba tirar primero si la rama remota es nueva, pero no he verificado ese caso.


2
¿Te das cuenta de que este es un extracto de esta respuesta
Thomas Ayoub

14
Mirándolo ahora, se superponen. Solo el mío es sucinto y te dice qué hacer en lugar de contar una historia. Supongo que puede ser más útil, por lo tanto, especialmente para las versiones de git de hoy en día. Puedes rechazarlo si crees que es una mala respuesta.
matanster

1
git fetch es la opción segura. Intente buscar antes de usar pull. Ambos descargan contenido remoto, pero aunque la búsqueda no cambia el estado local, la extracción cambiará inmediatamente el estado local.
Peter Szalay

89

OK , la respuesta es fácil ... Básicamente ves la rama, ¡pero aún no tienes una copia local! ...

Necesitas a fetchla rama ...

Simplemente puede buscar y luego pasar a la rama, use el comando de una línea a continuación para hacer eso:

git fetch && git checkout test

También creé la imagen a continuación para que puedas compartir las diferencias, ver cómo fetchfunciona y también cómo es diferente pull:

git fetch


@DmitriZaitsev sí, funcionará, si la rama remota está allí, y usted busca, obtendrá la rama localmente ... git fetch && git checkout test ... Así que esto funciona, a menos que no haya una rama remota, pero el pregunta diciendo que ya hay una sucursal remota allí ...
Alireza

A mi modo de ver la pregunta, testparece una nueva rama, por lo que no es probable que esté presente localmente. De lo contrario, podría hacerlo más fácil con un solo git pullcomando.
Dmitri Zaitsev

@DmitriZaitsev, sí, es por eso que dije git fetch, que verifica las ramas remotas que acaban de crear, pull puede traer otras cosas no deseadas, pero fetch hace que todas las ramas estén disponibles si ya tienes el repositorio local ...
Alireza

¿ fetchSin pulldejar cambios en la copia recuperada pero no en la sucursal local, lo que lleva a que su sucursal local no esté actualizada?
Dmitri Zaitsev

56

Para clonar un repositorio de Git, haga:

git clone <either ssh url /http url>

El comando anterior verifica todas las ramas, pero solo masterse inicializará la rama. Si desea pagar las otras sucursales, haga:

git checkout -t origin/future_branch (for example)

Este comando verifica la rama remota, y el nombre de su rama local será el mismo que la rama remota.

Si desea anular el nombre de su sucursal local al finalizar la compra:

git checkout -t -b enhancement origin/future_branch

Ahora su nombre de sucursal local es enhancement, pero su nombre de sucursal remota es future_branch.

Documentación


git clone <url ssh / url http> - funciona perfectamente para mí
Kmeixner

Sí, estás en lo correcto. Gracias por su información, la actualizaré muy pronto @warvariuc
Madhan Ayyasamy

Si el control remoto no tiene master, esto no va a funcionar.
polkovnikov.ph

36

Puedes probar

git fetch remote
git checkout --track -b local_branch_name origin/branch_name

o

git fetch
git checkout -b local_branch_name origin/branch_name

2
Para su información, --trackya no es necesario en las versiones más nuevas de git, porque está configurado de forma predeterminada, como se explica en esta respuesta anterior .

33

Primero, debes hacer:

git fetch # Si no sabe sobre el nombre de la sucursal

git fetch origin branch_name

En segundo lugar, puede verificar la sucursal remota en su local al:

git checkout -b branch_name origin/branch_name

-b creará una nueva rama en el nombre especificado de la rama remota seleccionada.


No entiendo -b. Si puede hacer "git checkout master", ¿por qué no puede hacer "git checkout origin / test"?
John Little el

-b para una nueva sucursal que es de origen / maestro
Mohideen bin Mohammed

28

Yo uso el siguiente comando:

git checkout --track origin/other_remote_branch

13
Esta respuesta sería mucho más útil si explica por qué la está utilizando de esta manera. es decir, por qué alguien debería usar '--track' y así sucesivamente ...
Matt Friedman

27

Comandos

git fetch --all
git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name>

son iguales a

 git fetch --all

y entonces

 git checkout -b fixes_for_dev origin/development

Ambos crearán una latest fixes_for_devdedevelopment


24

Si la rama está en algo diferente al origincontrol remoto, me gustaría hacer lo siguiente:

$ git fetch
$ git checkout -b second/next upstream/next

Esto verificará la nextrama en el upstreamcontrol remoto en una rama local llamada second/next. Lo que significa que si ya tiene una sucursal local llamada a continuación, no entrará en conflicto.

$ git branch -a
* second/next
  remotes/origin/next
  remotes/upstream/next


18

Ninguna de estas respuestas funcionó para mí. esto funcionó:

git checkout -b feature/branch remotes/origin/feature/branch


1
Gracias. Me preguntaba si tenía que usar la ruta completa ( controles remotos / origen / función / rama ) que vi gital llamar al git branch -acomando, pero no estaba seguro, así que simplemente lo usé git checkout -b apps/FEATURE/branch origin/apps/FEATURE/branchy parecía funcionar. Mensaje:Branch 'apps/FEATURE/branch' set up to track remote branch 'apps/FEATURE/epicBranch' from 'origin'. Switched to a new branch 'apps/FEATURE/branch'
Chris22

18

Estaba atrapado en una situación viendo error: pathspec 'desired-branch' did not match any file(s) known to git.todas las sugerencias anteriores. Estoy en git versión 1.8.3.1.

Entonces esto funcionó para mí :

git fetch origin desired-branch
git checkout -b desired-branch FETCH_HEAD

La explicación detrás es que me di cuenta de que al recuperar la rama remota, se recuperaba a FETCH_HEAD:

$ git fetch origin desired-branch
From github.com:MYTEAM/my-repo
    * branch            desired-branch -> FETCH_HEAD

17

Simplemente ejecute git checkoutcon el nombre de la rama remota. Git creará automáticamente una rama local que rastrea la remota:

git fetch
git checkout test

Sin embargo, si ese nombre de sucursal se encuentra en más de un control remoto, esto no funcionará ya que Git no sabe cuál usar. En ese caso, puede usar:

git checkout --track origin/test

o

git checkout -b test origin/test

En 2.19 , Git aprendió la checkout.defaultRemoteconfiguración, que especifica un control remoto predeterminado para resolver dicha ambigüedad.


16

git branch -rdice que el nombre del objeto no es válido, porque ese nombre de rama no está en la lista de ramas locales de Git. Actualice su lista de sucursales locales desde el origen con:

git remote update

Y luego intente revisar su rama remota nuevamente.

Esto funcionó para mí.

Creo que git fetchatrae todas las ramas remotas, que no es lo que quería el póster original.


2
FYI, git remote update también buscará todas las ramas remotas .

13

El git remote show <origin name>comando enumerará todas las ramas (incluidas las ramas sin seguimiento). Luego puede encontrar el nombre de la sucursal remota que necesita buscar.

Ejemplo:

$ git remote show origin

Siga estos pasos para buscar ramas remotas:

git fetch <origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)

Ejemplo:

$ git fetch origin test:test
$ git checkout test

@hallski respondió que no funcionaban las versiones 2.15.1, pero reduje el clon de peso del archivo .git solo 1 rama y filtre el historial con el indicador --depth. por ejemplo, la $ git clone -b release --single-branch --depth 5 https://github.com/user/repo.gitinformación de Wron't $ git remote show originno enumera todas las ramas remotas con repositorios clonados de una sola rama.
Qh0stM4N

10

Recuperar desde el control remoto y pagar la sucursal.

git fetch <remote_name> && git checkout <branch_name> 

P.ej:

git fetch origin && git checkout feature / XYZ-1234-Add-alertas


9

Otros chicos y chicas dan las soluciones, pero tal vez pueda decirte por qué.

prueba de pago git que no hace nada

Does nothing no es igual doesn't work , así que supongo que cuando escribe 'prueba de pago git' en su terminal y presiona la tecla enter, no aparece ningún mensaje y no se produce ningún error. Estoy en lo cierto?

Si la respuesta es 'sí', puedo decirte la causa.

La causa es que hay un archivo (o carpeta) llamado 'prueba' en su árbol de trabajo.

Cuando se git checkout xxxanaliza,

  1. Git mira xxx como nombre de una rama al principio, pero no hay ninguna rama llamada prueba.
  2. Entonces Git piensa que xxxes un camino, y afortunadamente (o desafortunadamente), hay un archivo llamado prueba. Entonces git checkout xxxsignifica descartar cualquier modificación enxxx archivo.
  3. Si tampoco hay un archivo con nombre xxx, entonces Git intentará crearlo de xxxacuerdo con algunas reglas. Una de las reglas es crear una rama llamada xxxsi remotes/origin/xxxexiste.

gracias, seguí tratando de entender por qué git no estaba haciendo nada.
Mike R

8

Para obtener ramas recién creadas

git fetch

Para cambiar a otra rama

git checkout BranchName

6

Puede comenzar a rastrear todas las ramas remotas con el siguiente script de Bash:

#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`
  do git branch -f --track "$branch" "origin/$branch"
done

Aquí también hay una versión de una sola línea:

git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ;

5

git checkout -b "Branch_name" [B significa Crear sucursal local]

git branch --todos

git checkout -b "Nombre de su sucursal"

rama de git

pago exitoso de la rama maestra a la rama dev

ingrese la descripción de la imagen aquí


git checkout -b "Branch_name" [B significa Crear sucursal local]
Keshav Gera

3

para obtener todas las ramas remotas use esto:

git fetch --all

luego pagar a la sucursal:

git checkout test

2

Úselo fetchpara jalar todo su control remoto

   git fetch --all

Para enumerar sucursales remotas:

   git branch -r

Para listar todas tus sucursales

   git branch -l
   >>outpots like-
     * develop
       test
       master

Para pagar / cambiar una sucursal

   git checkout master

Probado git branch -ly no se mostró ninguna rama remota.
Dmitri Zaitsev

use git pull --allorgit fetch --all
Nasir Khan

Sí, y después de eso, git branch -l todavía muestra solo sucursales locales . Parece estar funcionando exactamente como git branchfuera -l, entonces, ¿cuál es la razón -l?
Dmitri Zaitsev

Además, su respuesta no responde la pregunta: masterno es una rama remota.
Dmitri Zaitsev

1
-lbandera para la lista. Se puede utilizar --listtambién
Nasir Khan

2

Para nosotros, parece que la remote.origin.fetchconfiguración dio un problema. Por lo tanto, no pudimos ver ninguna otra rama remota master, por git fetch [--all]lo que no ayudó. Ni git checkout mybranchtampoco git checkout -b mybranch --track origin/mybranchfuncionó, aunque ciertamente estaba en remoto.

La configuración anterior solo permitía masterser obtenida:

$ git config --list | grep fetch
remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master

Solucione el uso *y obtenga la nueva información del origen:

$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

$ git fetch
...
 * [new branch] ...
...

Ahora podríamos git checkoutla sucursal remota localmente.

No tengo idea de cómo terminó esta configuración en nuestro repositorio local.


1
Esto lo resolvió para mí ya que cloné una sola rama
Pontus Holmbom

2

Si el nombre de la rama remota comienza con caracteres especiales, debe usar comillas simples alrededor de él en el comando de pago, de lo contrario, git no sabrá de qué rama está hablando.

Por ejemplo, traté de pagar una rama remota llamada #9773pero el comando no funcionó correctamente, como se muestra en la imagen a continuación:

ingrese la descripción de la imagen aquí

Por alguna razón, me preguntaba si el símbolo agudo (#) podría tener algo que ver con eso, y luego intenté rodear el nombre de la rama con comillas simples, como '#9773'rathen que solo #9773, y afortunadamente funcionó bien.

$ git checkout -b '#9773' origin/'#9773'

En muchos shells de Unix, el #carácter se usa para comentarios, por lo #que se ignorará cualquier cosa posterior . Esto es una cosa de shell y no algo específico para git. Usar comillas de una barra invertida antes de la #debería ser suficiente.
Paulo Scardine

1

Siga el comando para crear una carpeta vacía. Ingrese eso y use este comando:

saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url
Cloning into 'iPhoneV1'...
remote: Counting objects: 34230, done.
remote: Compressing objects: 100% (24028/24028), done.
remote: Total 34230 (delta 22212), reused 15340 (delta 9324)
Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done.
Resolving deltas: 100% (22212/22212), done.
Checking connectivity... done.
saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/
saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery
Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from origin.
Switched to a new branch '1_4_0_content_discovery'
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.