Tire de una rama determinada del servidor remoto

6 minutos de lectura

avatar de usuario
tybro0103

Digamos que alguien creó una rama xyz. ¿Cómo tiro de la rama? xyz desde el servidor remoto (por ejemplo GitHub) y fusionarlo en una rama existente xyz en mi repositorio local?

la respuesta a
Envía ramas a Git me da el error “! [rejected]” y menciona “no avance rápido”.

  • ¿Cuál es el comando real que estás ejecutando?

    – Álex n.

    10 de noviembre de 2009 a las 16:20

  • Es la recuperación la que puede fallar con el mensaje ‘no avance rápido’. ¿Modificó la rama de seguimiento remoto (origen/xyz), o la rama se rebobinó/reescribió en el repositorio remoto? Es posible que deba usar “git fetch origin --force“, pero lea la documentación antes de hacerlo.

    – Jakub Narębski

    10 de noviembre de 2009 a las 18:46

  • El control remoto podría ser, por ejemplo, una URL de github, con una rama seleccionada … (ver comentario a la respuesta de Cabri)

    – Felipe Oakley

    12 de febrero a las 16:09

Pero me sale un error “! [rejected]y algo sobre “avance no rápido”

Eso es porque Git no puede fusionar los cambios de las ramas en su maestro actual. Digamos que has revisado la sucursal mastery desea fusionarse en la rama remota other-branch. Cuando haces esto:

$ git pull origin other-branch

Git básicamente está haciendo esto:

$ git fetch origin other-branch && git merge other-branch

Eso es un pull es solo un fetch seguido de un merge. Sin embargo cuando pull-ing, Git lo hará solamente unir other-branch si puede realizar un avance rápido unir. A avance rápido merge es una combinación en la que el encabezado de la rama en la que está tratando de fusionarse es un descendiente directo de la cabecera de la sucursal que desea fusionar. Por ejemplo, si tiene este árbol histórico, fusionar other-branch daría como resultado una fusión de avance rápido:

O-O-O-O-O-O
^         ^
master    other-branch

Sin embargo, esto sería no ser una fusión de avance rápido:

    v master
O-O-O
\
 \-O-O-O-O
         ^ other-branch

Para resolver su problema, primero buscar la rama remota:

$ git fetch origin other-branch

Luego combínalo con tu rama actual (supongo que eso es master), y solucione cualquier conflicto de fusión:

$ git merge origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit    # And commit the merge!

  • No, el problema es con la obtención, no con el paso de combinación.

    – Jakub Narębski

    10 de noviembre de 2009 a las 22:02

  • Normalmente, los controles remotos se configuran de tal manera que se fuerzan las recuperaciones, incluso si no dan como resultado una confirmación de avance rápido, por lo que no debería ocurrir en la recuperación a menos que el OP haya cambiado algo con la configuración habitual. El problema de avance rápido puede ocurrir durante la recuperación o unir. ¿Qué te hace decir que el problema está definitivamente en la búsqueda y no en la fusión?

    – mipadi

    10 de noviembre de 2009 a las 23:31

  • Sigo estos pasos (buscar, fusionar). Git me dice que no hay nada que hacer. Cuando trato de comprometerme, se cae gimiendo sobre los avances rápidos.

    – Jean Jordan

    8 de noviembre de 2011 a las 17:08

  • @mipadi Tuve el mismo problema que Jean y, aunque no puedo decir que el control remoto esté configurado de la manera no predeterminada que mencionaste, puedo decir usando git fetch -f han solucionado mi problema! ¡Gracias!

    – Cregox

    28 de febrero de 2012 a las 13:50

  • Esto fusiona la rama remota xzy en sucursal local master, que no es lo que implicaba la pregunta original; “¿Cómo puedo extraer la rama xyz de GitHub y fusionarla con la rama xyz en mi localhost?”

    – usuario5359531

    10 de marzo de 2017 a las 21:04


avatar de usuario
innaM

Simplemente realice un seguimiento de sus sucursales remotas de forma explícita y sencilla git pull hará justo lo que quieras:

git branch -f remote_branch_name origin/remote_branch_name
git checkout remote_branch_name

Esta última es una operación local.

O aún más encajando con el Documentación de GitHub sobre bifurcación:

git branch -f new_local_branch_name upstream/remote_branch_name

  • Si obtiene ‘No es un nombre de objeto válido: ‘origin/remote_branch_name’, haga ‘git fetch origin’ primero.

    – Martín Konicek

    4 de junio de 2012 a las 9:09

  • fatal: no se puede forzar la actualización de la rama actual.

    -Wolfgang Blessen

    25 de enero a las 13:06

avatar de usuario
Roberto Cabri

Un enfoque seguro es crear primero una rama local (es decir, xyz) y luego llevar la rama remota a sus locales.

# create a local branch
git checkout -b xyz

# make sure you are on the newly created branch
git branch

# finally pull the remote branch to your local branch
git pull origin xyz

Esta es la sintaxis que podría llevar una sucursal remota a una sucursal local.

git pull {repo} {remotebranchname}:{localbranchname}

git pull origin xyz:xyz

  • ¡Perfecto! Simplemente no conocía esa sintaxis: git pull {repo} {remotebranchname}:{localbranchname}. Pregunta, si ese tirón no funciona (tal vez alguien actualizó la rama y habría conflictos de fusión), ¿cuáles son mis opciones?

    – Costa Michailidis

    29 de octubre de 2013 a las 14:18

  • Estoy rechazando esto porque intenta fusionar la rama remota en su rama actual (por ejemplo, maestro). Esto no es lo que la mayoría de la gente quiere hacer, y no es lo que pidió el OP. La respuesta de @mohit es la opción correcta.

    – Phrogz

    5 de febrero de 2016 a las 5:01

  • Phrogz: parece que este comportamiento cambió en versiones recientes de Git. Usé esto antes y funcionó perfectamente bien.

    – Pawan

    10 de enero de 2017 a las 13:08

  • ¡La respuesta es seriamente engañosa! Apliqué la respuesta sin darme cuenta del comentario de @ Phrogz y ahora sufro el problema que mencionó. ¡O qué rama intenta fusionar debe expresarse explícitamente o la respuesta debe eliminarse!

    – buraky

    25 de enero de 2021 a las 8:48


  • @Phrogz,@Letitbe, ¿qué comando probaste? Puedo cambiar la respuesta en consecuencia. Nunca tuve el problema de llevarlo al maestro.

    – Roberto Cabri

    12 de febrero de 2021 a las 15:18

avatar de usuario
mohit

La mejor manera es:

git checkout -b <new_branch> <remote repo name>/<new_branch>

avatar de usuario
Inundación Bradley

git fetch tomará la última lista de sucursales.

Ahora usted puede git checkout MyNewBranch

Hecho 🙂


Para obtener más información, consulte los documentos: buscar

  • funcionó bien git fetch, luego git checkout remoteBranch

    usuario7396942

    28 de junio de 2021 a las 13:55

avatar de usuario
Pedro Mortensen

No estoy seguro de entender completamente el problema, pero extraer una rama existente se hace así (al menos funciona para mí 🙂

git pull origin BRANCH

Esto supone que su sucursal local se crea a partir del origen/SUCURSAL.

  • funcionó bien git fetch, luego git checkout remoteBranch

    usuario7396942

    28 de junio de 2021 a las 13:55

En pocas palabras, si desea extraer de GitHub la rama the-branch-I-want:

git fetch origin
git branch -f the-branch-I-want origin/the-branch-I-want
git checkout the-branch-I-want

  • ¡GUAU, funcionó! Normalmente lo haría git checkout -b branch-i-want git pull origin branch-i-want ¡Gracias!

    – Alex Antonio

    25 de julio a las 3:32


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad