Fusionar el repositorio de git en la rama de otro repositorio

120

Dado repo Foo y repo Bar. Quiero fusionar Bar con Foo, pero solo en una rama separada, llamada baz.

git checkout -b baz <= ponga el repositorio de Bar aquí.

Comerciante de leche
fuente

Respuestas:

230

No puede fusionar un repositorio en una rama . Puede fusionar una rama de otro repositorio en una rama de su repositorio local. Suponiendo que tiene dos repositorios, fooy barambos ubicados en su directorio actual:

$ ls
foo bar

Cambie al foorepositorio:

$ cd foo

Agregue el barrepositorio como un control remoto y recójalo:

$ git remote add bar ../bar
$ git remote update

Cree una nueva rama bazen el foorepositorio en función de su rama actual:

$ git checkout -b baz

Fusionar la rama somebranchdel barrepositorio en la rama actual:

$ git merge --allow-unrelated-histories bar/somebranch

( --allow-unrelated-historiesno es necesario antes de la versión 2.9 de git)

larsks
fuente
21
desde git 2.9 probablemente necesitará agregar --allow-unrelated-historiesal comando git merge.
Drasill
2
Información sobre el comentario de @Drasill: github.com/git/git/blob/master/Documentation/RelNotes/…
GaTechThomas
10
No tengo idea de lo que estoy haciendo y realmente no puedo leer esto con los marcadores de posición foo / bar. ¿Alguien puede editar esto con ejemplos reales de la vida real (como enlaces cuando sea apropiado y tal)?
rien333
Oh, esto es genial. Preferiría fusionarlo en un subdirectorio. No puede ser tan diferente, ¿verdad? Preferiría agregar ese paso.
macetw
1
Recibo toneladas de conflictos de fusión. De todos modos, ¿podrías forzar la fusión en una nueva rama?
nomadoda
41

Actualizado con comandos de la "vida real":

Comience desde su directorio de repositorio, asegúrese de que su copia de trabajo esté limpia (no se hayan cambiado, agregado o eliminado archivos).


Haz una nueva rama:

git checkout -b <my-branch>

Agrega el control remoto secundario, luego recógelo:

git remote add <repo-name> [email protected]:xxx/<repo-name>.git
git remote update

Fusiona una de sus ramas en tu rama actual:

git merge <repo-name>/<their-branch>


Si no sabe lo <their-branch>que quiere, busquemaster

Si está seguro de que desea aceptar todos los cambios remotos y evitar conflictos ( sobrescribir los suyos ), puede especificar -X theirscomo opción git mergeen el último paso.

Si desea agregarlo en un subdirectorio, probablemente debería usar los submódulos git

vinzdef
fuente
3

Usando la guía de larsks, pude hacer esto usando SourceTree.

  1. Creó una sucursal en el repositorio de destino
  2. Se agregó el repositorio de origen como un control remoto, presionando el botón Configuración y agregando el repositorio de origen.
  3. Las ramas de ambos repositorios ahora se muestran en la lista de ramas. Utilicé la herramienta de combinación para fusionar una rama del repositorio de origen a la rama de mi nuevo repositorio de destino.
  4. Resolvió cualquier conflicto utilizando SourceTree o mi IDE
  5. Confirmar los cambios en mi rama.
  6. Elimine el repositorio de origen de la lista remota mediante el botón Configuración.
TheBigSot
fuente