Tengo un proyecto con múltiples sucursales. Los he estado empujando a GitHub , y ahora que alguien más está trabajando en el proyecto, necesito sacar sus ramas de GitHub. Funciona bien en master. Pero digamos que alguien creó una rama xyz
. ¿Cómo puedo extraer una rama xyz
de GitHub y fusionarla en una rama xyz
en mi localhost
?
De hecho, tengo mi respuesta aquí: empujar y tirar ramas en Git
Pero recibo un error "! [Rechazado]" y algo sobre "avance no rápido".
¿Alguna sugerencia?
git fetch origin --force
", pero lea la documentación antes de hacerlo.Respuestas:
Eso es porque Git no puede fusionar los cambios de las ramas en su maestro actual. Digamos que ha desprotegido la rama
master
y desea fusionarse en la rama remotaother-branch
. Cuando haces esto:Git básicamente está haciendo esto:
Es decir, a
pull
es solo unfetch
seguido de amerge
. Sin embargo, cuando sepull
activa, Git solo se fusionaráother-branch
si puede realizar una combinación de avance rápido . Una fusión de avance rápido es una fusión en la que la cabeza de la rama en la que está intentando fusionarse es un descendiente directo de la cabeza de la rama que desea fusionar. Por ejemplo, si tiene este árbol de historial, la fusiónother-branch
daría como resultado una fusión de avance rápido:Sin embargo, esto no sería una combinación de avance rápido:
Para resolver su problema, primero busque la rama remota:
Luego combínelo en su rama actual (supongo que es así
master
), y arregle cualquier conflicto de fusión:fuente
git fetch -f
he solucionado mi problema! ¡Gracias!xzy
en la rama localmaster
, que no es lo que implicaba la pregunta original; "¿Cómo puedo extraer la rama xyz de GitHub y fusionarla en la rama xyz en mi host local?"Simplemente
git pull
haga un seguimiento explícito de sus ramas remotas y un simple hará lo que quiera:Este último es una operación local.
O incluso más adecuado para la documentación de GitHub sobre bifurcación :
fuente
Puede tirar de una rama a otra con los siguientes comandos.
Cuando estás en la rama maestra, también puedes primero pagar una rama como:
Esto crea una nueva rama, "xyz", desde el maestro y la comprueba directamente.
Entonces haces:
Esto tira de la nueva sucursal a su
xyz
sucursal local .fuente
La mejor manera es:
fuente
git fetch
tomará la última lista de sucursales.Ahora usted puede
git checkout MyNewBranch
Hecho :)
Para más información ver documentos: git fetch
fuente
No estoy seguro de entender completamente el problema, pero extraer una rama existente se hace así (al menos funciona para mí :)
Esto supone que su sucursal local se crea fuera del origen / SUCURSAL.
fuente
Esto me ayudó a obtener una rama remota antes de fusionarla en otra:
fuente
En pocas palabras, si desea extraer de GitHub la rama
the_branch_I_want
:fuente
Por lo general, si solo ha asignado un repositorio a su código, el gitreponame sería el origen.
Si está trabajando en dos repositorios, como uno es local y otro para remoto, puede consultar la lista de repositorios desde git remote -v . Esto muestra cuántos repositorios se asignan a su código actual.
BranchName debe existir en gitreponame correspondiente.
puede usar los siguientes dos comandos para agregar o eliminar repositorios
fuente
también puedes hacer
arregle los conflictos de fusión si hay alguno
-r es para rebase. Esto te hará ramificar la estructura de
a
Esto conducirá a una historia más limpia. Nota: En caso de que ya haya empujado su otra rama al origen (o cualquier otro control remoto), es posible que tenga que forzar a empujar su rama después del rebase.
fuente
yo hice
En vez de
Según lo sugerido por @innaM. Cuando utilicé la versión ascendente, decía 'fatal: No es un nombre de objeto válido:' upstream / remote_branch_name ''. No lo hice
git fetch origin
como lo sugirió un comentario, sino que simplemente lo reemplacéupstream
conorigin
. Supongo que son equivalentes.fuente
para sacar la rama de GitHub puedes usar
Asegúrese de que el nombre de la rama sea exactamente el mismo.
fuente