Rastrea una nueva sucursal remota creada en GitHub

183

Ya tengo una rama maestra local que rastrea la rama maestra remota de un proyecto github. Ahora, un colaborador mío ha creado una nueva sucursal en el mismo proyecto, y quiero hacer lo siguiente en consecuencia:

  1. crear una nueva sucursal localmente
  2. haga que esta nueva rama rastree la nueva rama remota creada.

¿Cómo debo hacerlo correctamente?

MLister
fuente
2
git checkout --track -b <rama local> <remote> / <rama rastreada> también funciona.
MLister
14
... o simplemente git checkout -t <remote>/<whatever>. Si solo hay una rama de seguimiento remoto que termina en <whatever>usted, incluso puede hacer git checkout <whatever>y adivinar lo que quiere decir.
Mark Longair

Respuestas:

251
git fetch
git branch --track branch-name origin/branch-name

El primer comando se asegura de tener una rama remota en el repositorio local. El segundo comando crea una rama local que rastrea la rama remota. Se supone que su nombre remoto es originy el nombre de la sucursal es branch-name.

--track La opción está habilitada de forma predeterminada para las sucursales remotas y puede omitirla.

max
fuente
3
Cuando hago esto, recibo una advertencia: refname 'nombre-rama' es ambiguo.
Ultrasaurus
19
Si solo hay una rama remota con ese nombre de rama, puede hacerlo git checkout <branchname>y git la revisará automáticamente y configurará una rama de seguimiento. Solo quería reiterar lo que @Mark Longair dijo anteriormente en este comentario: stackoverflow.com/questions/11262703/… .
Ryan Walls
¿El nombre de mi sucursal remota es remotes/origin/develop? ¿No debería ser justo origin/develop? ¿Son estos lo mismo?
ア レ ッ ク ス
2
Tenía que hacerlo git fetch --all, de lo contrario, no se obtendrían nuevas sucursales
mschrimpf
¿Cómo hacer esto en Eclipse? Cuando termine con eso cmd, ¿eclipse detectará la nueva rama?
Deckard el
31

Si no tiene una sucursal local existente, es realmente tan simple como:

git fetch
git checkout <remote-branch-name>

Por ejemplo, si busca y hay una nueva rama de seguimiento remoto llamada origin/feature/Main_Page, simplemente haga esto:

git checkout feature/Main_Page

Esto crea una rama local con el mismo nombre que la rama remota, rastreando esa rama remota. Si tiene varios controles remotos con el mismo nombre de rama, puede usar los menos ambiguos:

git checkout -t <remote>/<remote-branch-name>

Si ya creó la sucursal local y no desea eliminarla, consulte ¿Cómo hacer que una sucursal Git existente rastree una sucursal remota? .

kotoole
fuente
1
git checkout 1.5-branch( remotes/upstream/1.5-branchestá en la salida de git branch -a) resulta en error: pathspec '1.5-branch' did not match any file(s) known to git.Cambiar esto a git checkout upstream/1.5-branchresultados en HEAD separado y no se crea ninguna rama local. Creo que esta parte de la respuesta es simplemente incorrecta. Esto es con git 2.4.3
Piotr Dobrogost
El primer comando funciona para mí en git 1.9.3, incluso para diferentes controles remotos. Es posible que este comportamiento haya cambiado. El resultado de su segundo comando es lo que esperaría. Sin -t, no está especificando que desea hacer otra cosa que no sea mirar esa versión específica en el control remoto.
kotoole
1
Estoy de acuerdo con @PiotrDobrogost, creo que su afirmación "Esto crea una sucursal local con el mismo nombre ..." es errónea. Lo que buscará (cuando se llame de esta manera) es crear una rama de seguimiento remoto para cada rama en el control remoto. Eso significa una sucursal en su repositorio local llamada <remote>/<branch>. Una rama de seguimiento remota es de solo lectura, lo que indica dónde se encontraba esa rama en la última captura remota. Llamar checkouta esa referencia de sucursal te pone en modo HEAD separado, tal como dice Piotr. Tenga en cuenta que la especificación de la rama remota a buscar evita crear ramas de seguimiento remoto no deseadas.
scanny
2
Para que quede claro una vez más: sugiero usar el comando git checkout feature-branch. NO sugiero usar el comando git checkout origin/feature-branch que, como ambos han señalado, dará como resultado una cabeza desprendida inútil.
kotoole
mucho más simple y al grano. Funciona bien con git 2.8.3 en cygwin.
Felipe Alvarez
29

En primer lugar, debe buscar el repositorio remoto:

git fetch remoteName

Luego puede crear la nueva rama y configurarla para rastrear la rama remota que desee:

git checkout -b newLocalBranch remoteName/remoteBranch

También puede usar "git branch --track" en lugar de "git checkout -b" como máximo especificado.

git branch --track newLocalBranch remoteName/remoteBranch
Anghel Contiu
fuente
Si checkout -busa una rama remota como punto de partida, entonces no es necesario usarla --track.
55
Además, como se señala en este comentario , si solo lo hace git checkout <branchname>, y hay una rama remota con el mismo nombre (después de que hizo una git fetch), la rama local se configurará automáticamente para rastrear la remota.
9

Cuando la rama no es una rama remota, puede empujar su rama local directamente al control remoto.

git checkout master
git push origin master

o cuando tienes una rama de desarrollo

git checkout dev
git push origin dev

o cuando existe la rama remota

git branch dev -t origin/dev

Hay otras posibilidades para empujar una rama remota.

René Höhle
fuente
Entonces tomas la tercera opción. Cuando existe la rama remota, puede crear una rama local y rastrear la rama remota :) es lo mismo que la versión de max pero más corta.
René Höhle