¿Git sacando una rama de otro repositorio?

86

Tengo un repositorio de git local que es un clon de un repositorio en github. Alguien ha bifurcado el repositorio y ha realizado cambios en una nueva rama de un nuevo repositorio. Quiero mover esta nueva rama a mi repositorio (localmente para trabajar en ella primero antes de fusionarme con el maestro).

Intenté crear una nueva rama y luego extraer del repositorio bifurcado, pero se queja porque la nueva rama es una copia de la rama maestra, así como los cambios del archivo local, por lo que dice

error: Your local changes to the following files would be overwritten by merge.

Entonces, ¿cómo puedo colocar la rama en el otro repositorio en una nueva rama en mi repositorio local?

Espero que tenga sentido. Si no, este es mi repositorio: https://github.com/MatthewLM/cbitcoin

Como puede ver, alguien ha creado un nuevo repositorio con la rama "linuxBuild": https://github.com/austonst/cbitcoin/tree/linuxBuild

Quiero esa rama en mi repositorio local para MatthewLM / cbitcoin.

¿Cómo puedo hacer esto?

Matthew Mitchell
fuente

Respuestas:

156

git statusDebe asegurarse de que eso muestre que no existen cambios sin etapas en su repositorio local.
Puede hacer esto escondiendo primero sus cambios locales y luego tirando de esa rama. Luego puedes aplicar tu alijo.


Si desea volver a crear la estructura de la rama de la bifurcación en su repositorio local, puede hacer lo siguiente:

git remote add fork <url of fork>
git fetch fork
git checkout -b fork_branch fork/<branch>

Esto creará la rama local fork_branchcon el mismo historial que <branch>en la bifurcación, es decir, fork_branchse desviará de su masterlugar <branch>en la bifurcación. Además, su sucursal local ahora rastreará esa sucursal en la bifurcación, por lo que puede incorporar fácilmente los nuevos cambios comprometidos en la bifurcación.

Creo que aún debe asegurarse de antemano de que su copia de trabajo no contiene ningún cambio.

Daniel Hilgarth
fuente
OK gracias. Esto sería genial si quisiera mis cambios locales y las confirmaciones no se encuentran en la rama de la bifurcación. Pero, ¿qué pasa si quiero que la nueva rama sea exactamente como está en el repositorio de la bifurcación? Eso incluye eliminar cualquier confirmación de mi propio repositorio después de que sucedió la bifurcación para esta nueva rama. De esa manera, sería como si la rama se hubiera creado en mi propio repositorio en lugar de en uno bifurcado.
Matthew Mitchell
Bueno, su respuesta es una solución aceptable para lo que necesito hacer, sin embargo, me resultaría más sencillo si pudiera introducir una nueva rama en un repositorio. Esperaré un rato para ver qué dicen los demás.
Matthew Mitchell
@MatthewMitchell: compruebe la actualización. ¿Es eso lo que estabas buscando?
Daniel Hilgarth
Bueno, usé el método de fusionarlo con otra rama (solo lo fusioné con el maestro) al final, pero en el caso en el que solo quiera una rama exactamente como es de otro repositorio, intentaré la búsqueda y método de pago que describiste. Gracias.
Matthew Mitchell
Se utiliza para migrar otra rama "gh-pages" de otro repositorio.
Marcello de Sales
38

Método sin agregar control remoto.

git checkout --orphan fork_branch
git reset --hard
git pull <url of fork> <branch>
Alex78191
fuente
2
Gracias por esto, lo tengo marcado como favorito y sigo volviendo a él.
Shane Smiskol
2
Mejor respuesta para 2020
Diamante