Git fetch rama remota


Mi colega y yo estamos trabajando en el mismo repositorio, lo hemos ramificado en dos ramas cada una técnicamente para diferentes proyectos, pero tienen similitudes, por lo que a veces queremos comprometernos con el *master desde la rama.

Sin Embargo, tengo la rama. Mi pregunta es, ¿cómo puede mi colega sacar esa rama específicamente? A git clone del repo no parece crear las ramas localmente para él, aunque puedo ver que viven en unfuddle después de un empuje en mi extremo.

También, cuando originalmente hice la rama hice -b checkout. ¿No estás seguro de si eso hace mucha diferencia?

iMac:test_solar dave$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

git fetch origin discover
git checkout discover

Estos son los comandos que ejecuté. Pero definitivamente no está funcionando. Quiero poder revisar esa rama y luego enviar y confirmar solo los cambios de ramas de varios colaboradores o estaciones de trabajo.

Author: AshNaz87, 2012-03-02

25 answers

Necesita crear una rama local que rastree una rama remota. El siguiente comando creará una rama local llamada daves_branch , rastreando la rama remota origin/daves_branch . Cuando envíes tus cambios, la rama remota se actualizará.

Para la mayoría de las versiones de git:

git checkout --track origin/daves_branch

--track es la abreviatura de git checkout -b [branch] [remotename]/[branch] donde [remotename] es origin en este caso y [branch] es dos veces igual, daves_branch en este caso.

Para git 1.5.6.5 necesitabas esto:

git checkout --track -b daves_branch origin/daves_branch

Para git 1.7.2.3 y superior esto es suficiente (podría haber comenzado antes, pero esta es la confirmación más temprana que pude encontrar rápidamente):

git checkout daves_branch

Tenga en cuenta que con las versiones recientes de git, este comando no creará una rama local y lo pondrá en un estado de "CABEZA separada". Si desea una rama local, utilice la opción --track. Todos los detalles aquí: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches

 2304
Author: ralphtheninja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-05 16:10:03

He utilizado fetch seguido por checkout ...

git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>

... donde <rbranch>es la rama remota o fuente ref y <lbranch>es la todavía inexistente rama local o destino ref que desea rastrear y que probablemente desee nombrar lo mismo que la rama remota o fuente ref. Esto se explica en opciones en la explicación de <refspec>.

Git es tan inteligente que automáticamente completa el primer comando si tab después de las primeras letras de la rama remota. IE: Ni siquiera tengo que nombrar la rama local, Git copia automáticamente el nombre de la rama remota para mí. Gracias Git!

También como la respuesta en este post similar SO muestra, si no nombra la rama local en fetch, aún puede crearla cuando la compruebe usando la bandera -b. IE: git fetch <remote> <branch> seguido de git checkout -b <branch> <remote>/<branch> hace exactamente lo mismo que mi respuesta inicial. Y evidentemente si su repo tiene solo un remoto, entonces solo puede hacer git checkout <branch> después de fetch y creará una rama local para usted. EG: Acabas de clonar un repositorio y quieres ver ramas adicionales desde el control remoto.

Creo que parte de la documentación de fetch puede haber sido copiada textualmente de pull. En particular, la sección sobre <refspec> en opciones es la misma. Sin embargo, no creo que fetch alguna vez merge, para que si dejas el lado de destino del colon vacío fetch no debería hacer nada.

NOTA: Que git fetch <remote> <refspec> es la abreviatura de git fetch <remote> <refspec>: que por lo tanto no haría nada, pero git fetch <remote> <tag> es lo mismo que git fetch <remote> <tag>:<tag> que debería copiar el remoto <tag> localmente.

Supongo que esto solo es útil si desea copiar una rama remota localmente, pero no necesariamente verificarla de inmediato. De lo contrario, ahora usaría la respuesta aceptada anterior , que se explica en detalle en la primera sección de la descripción de pagoy más adelante en la sección opciones bajo la explicación de --track, ya que es un 1-liner. Bueno... una especie de 1-liner, porque todavía tiene que ejecutar git fetch <remote> primero.

Para su información: El orden del <refspecs> (fuente:destino) explica el extraño método pre Git-1.7 para eliminar ramas remotas. IE: No introducir nada en el refspec de destino.

 761
Author: Mark Mikofski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:58

Si está tratando de "checkout" una nueva rama remota (que existe solo en el remoto, pero no localmente), esto es lo que necesitará:

git fetch origin
git checkout --track origin/<remote_branch_name>

Esto asume que desea obtener desde origin. Si no es así, reemplace origin por su nombre remote.

 280
Author: paneer_tikka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-06 07:24:54

Para checkout myBranch que existe remotamente y no localmente - Esto funcionó para mí:

git fetch --all
git checkout myBranch

Recibí este mensaje:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'
 89
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-12 03:36:22

Use git branch -a (ramas locales y remotas) o git branch -r (solo ramas remotas) para ver todos los controles remotos y sus ramas. Luego puede hacer un git checkout -t remotes/repo/branch al remoto y crear una rama local.

También hay un comando git ls-remote para ver todas las referencias y etiquetas de ese control remoto.

 38
Author: Daniel Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-25 13:01:32

El título y la pregunta se confunden:

  • Git fetch rama remota
  • ¿cómo puede mi colega tirar de esa rama específicamente?

Si la pregunta es cómo puedo obtener una rama remota para trabajar o cómo git checkout una rama remota, una solución más simple es:

Con git (>=1.6.6) puedes usar:

git checkout <branch_name>

Si local <branch_name> no se encuentra pero existe una rama de seguimiento en exactamente un remoto con un nombre coincidente, tratar como equivalente a:

git checkout -b <branch_name> --track <remote>/<branch_name>

Consulte la documentación de git checkout

Para tu amigo:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
 33
Author: Guillaume Vincent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-31 10:53:41
git checkout -b serverfix origin/serverfix

Esta es una operación bastante común que git proporciona la abreviatura track track:

git checkout --track origin/serverfix

De hecho, esto es tan común que incluso hay un atajo para ese atajo. Si el nombre de la rama que estás intentando checkout (a) no existe y (b) coincide exactamente con un nombre en un solo control remoto, Git creará una rama de seguimiento para ti:

git checkout serverfix

Para configurar una rama local con un nombre diferente al de la rama remota, puede usar fácilmente la primera versión con una rama local diferente nombre:

git checkout -b sf origin/serverfix

Ahora, su rama local sf automáticamente extraerá de origin/serverfix.

Fuente: Pro Git 2a Edición, escrito por Scott Chacon y Ben Straub (corte para legibilidad)

 24
Author: ManuelSchneid3r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-18 14:13:14

Con este sencillo comando:

git checkout -b 'your_branch' origin/'remote branch'
 13
Author: Karthik damodara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-12 19:13:05
git fetch

git branch -r

git checkout <branch_name>
 12
Author: John Rodriguez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-04 21:13:32

También puede obtener y verificar la rama remota de una sola vez: -

git fetch && git checkout the-branch-name
 11
Author: Kumar Sambhav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-25 06:43:02

He escrito

git checkout <branch_name>

Y consiguió

Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'
 9
Author: Guillaume Guillaume,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-10 22:43:19

La forma más fácil de hacerlo, al menos para mí:

git fetch origin <branchName>
 9
Author: James Rochabrun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-20 01:00:14

A veces se le pide que no juegue con la rama master y trabaje solo con la rama remota (como se me pidió). Así que todo lo que necesitas es la rama remota.

Así que para clonar la rama remota sola (sin el maestro), haga esto

git clone url --branch remote_branch_name

Donde, remote_branch_name es el nombre de la rama remota

Por ejemplo,

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15

Esto asegurará que clone la rama remota a su rama local con el nombre de la rama remota.

Ahora si confirmas tu code y push, el código será enviado a esa rama sola.

 8
Author: ganezdragon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-06 05:11:05

git fetch --all & git checkout <branch name>

 7
Author: Jerome Anthony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-20 00:42:13

Digamos que tu control remoto es [email protected] y quieres su rama random_branch. El proceso debe ser el siguiente:

  1. Primero compruebe la lista de sus controles remotos por

    git remote -v

  2. Si no tienes el [email protected] remote en la salida del comando anterior, lo agregarías por

    git remote add xyz [email protected]

  3. Ahora puede obtener el contenido de ese control remoto por

    git fetch xyz

  4. Ahora checkout el rama de ese remoto por

    git checkout -b my_copy_random_branch xyz/random_branch

  5. Compruebe la lista de sucursales por

    git branch -a

La rama local my_copy_random_branch estaría rastreando la rama random_branch de su control remoto.

 4
Author: zafar142003,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-06 16:59:13

git fetch && git checkout <your friend's branch name> debería hacer el truco

 4
Author: tambakoo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-25 11:37:50

Los pasos son los siguientes;

  1. git fetch origin o git fetch --all, esto traerá todas las ramas remotas a su local y luego esta es la segunda opción con la que puede procesar.

  2. git checkout --track origin/<The_remote_branch you want to switch over>

Luego trabaja en esta rama y puedes verificar si estás en esa rama o no escribiendo

git branch

Muestra la rama en la que se encuentra actualmente.

 3
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-26 10:09:11

Si ya conoce su rama remota así...

git remote
=> One
=> Two

Y usted sabe el nombre de la rama que desea checkout ex. br1.2.3.4 entonces haga

git fetch One
=> returns all meta data of remote i.e. the branch name in question.

Todo lo que queda es pagar la rama

git checkout br.1.2.3.4

Luego haga cualquier rama nueva fuera de él.

 3
Author: SoEzPz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-26 17:51:26

Compruebe su .git/config, en particular qué seguimiento está presente en fetch para ese control remoto.

[remote "randomRemote"]
    url = [email protected]:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

Si tiene heads/* apuntando a randomRemote/*, cuando ejecute git fetch randomRemote, obtendrá todas las ramas. Entonces puedes simplemente revisar esa sucursal.

De lo contrario,

  1. Necesita agregar ramas remotas al seguimiento usando esto. Compruebe su .git/config después de ejecutar esto. Lo entenderás. git remote set-branches add add randomRemote randomBranch

  2. Ejecutar git fetch randomRemote. Esto buscará la rama remota.

  3. Ahora puedes correr git checkout randomBranch

 2
Author: Vamshi Suram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-01 14:29:24

Utilizas 'git pull' para mantener tus ramas separadas. Usaré repo real y nombres de rama para ayudar ya que 'lbranch' y 'rbranch' es difícil de descifrar.

Vamos a usar:

  • myteam.unfuddle.com = el servidor git remoto
  • tlc = cuenta del proyecto unfuddle donde existe el repo
  • daves_branch = nombre de la rama remota

    Usted, o cualquier colega, puede ejecutar esto para extraer solo su rama, sin importar cuántas ramas haya:

    git init
    git pull [email protected]:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
    
  •  1
    Author: Andrew,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
    2013-05-22 21:10:02

    Simplemente intente

    Origin git pull origin your_branch_name

     1
    Author: Rizo,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
    2017-12-12 20:44:31

    Si usted tiene un repositorio que fue clonado con depth depth 1 entonces muchos de los comandos que fueron listados no funcionarán. Por ejemplo, ver aquí

    % git clone --depth 1 https://github.com/repo/code
    Cloning into 'code'...
    cd code
    remote: Counting objects: 1778, done.
    remote: Compressing objects: 100% (1105/1105), done.
    remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
    Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
    Resolving deltas: 100% (87/87), done.
    Checking connectivity... done.
    Checking out files: 100% (1215/1215), done.
    % cd code
    % git checkout other_branch
    error: pathspec 'other_branch' did not match any file(s) known to git.
    % git fetch origin other_branch
    remote: Counting objects: 47289, done.
    remote: Compressing objects: 100% (15906/15906), done.
    remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
    Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
    Resolving deltas: 100% (30151/30151), completed with 362 local objects.
    From https://github.com/repo/code
     * branch            other_branch-> FETCH_HEAD
    % git checkout other_branch
    error: pathspec 'other_branch' did not match any file(s) known to git.
    %
    

    En este caso me gustaría volver a colocar el repositorio, pero tal vez hay otras técnicas, por ejemplo, git shallow clone (clone depth depth) misses remote branches

     1
    Author: Colin D,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
    2018-01-24 21:21:03

    Un simple comando -"git checkout remote_branch_name" te ayudará a crear una rama local que tenga todos los cambios en la rama remota.

     0
    Author: SIjeesh Kattumunda,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
    2018-01-19 12:34:41

    git branch <name> --track origin/<name>

     0
    Author: Chris F Carroll,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
    2018-03-11 18:02:34

    Lo que me ayudó fue

    1) Para ver todas las ramas remotas disponibles (por ejemplo, 'remote-branch-name')

    git branch -r
    

    2) Crear una rama local usando el nombre de la rama remota

    git fetch && git checkout 'remote-branch-name'
    
     0
    Author: Arlan T,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
    2018-09-17 02:16:14