Fusionar entre horquillas en GitHub

259

Bifurqué un repositorio de GitHub. Luego empujé algunos cambios a mi tenedor. Luego, el repositorio original fusionó mis cambios y algunos otros. Ahora, quiero fusionar esos cambios que me faltan. Intenté una extracción simple seguida de una inserción, pero esto produjo mis confirmaciones por duplicado. ¿Cuál es la mejor manera de hacerlo?

R. Martinho Fernandes
fuente

Respuestas:

352

Probablemente tenga un "control remoto" para cada repositorio. Debe tirar de un control remoto y empujar hacia el otro.

Si originalmente clonaste desde tu fork, ese control remoto se llamará "origen". Si aún no lo ha agregado, deberá agregar el repositorio de la primera persona como otro control remoto:

git remote add firstrepo git://github.com/first/repo.git

Después de que todo esté configurado, debería poder

git pull firstrepo master
git push origin

Recuerde, git pullno es más que una macro que lo hace git fetchy git merge, en ese orden. Solo necesita obtener la lista de confirmaciones del repositorio de la primera persona y luego fusionar su rama en su árbol. La fusión debería hacer lo correcto con tus commits en ambas ramas.

GitHub, en toda su perpetua genialidad, te da un atajo, por supuesto. Hay un botón de "avance rápido" en su bifurcación del repositorio que puede usar para atrapar su bifurcación si está completamente fusionado con el otro lado.

Jim Puls
fuente
1
¿Hay alguna manera de hacer esto completamente con operaciones remotas? Si lo entiendo correctamente, con este método descargará todos los cambios en el repositorio local y luego los cargará (empujará) a la bifurcación en github. Prefiero simplemente de alguna manera sacar todos los cambios directamente en la bifurcación en github.
Ken Liu
1
No. Git no lo admite. Afortunadamente, Github ahora tiene un botón de combinación en la interfaz web.
cweiske
13
@cweiske: ¿dónde está este botón Combinar? He revisado todas las páginas de administración y las páginas principales, pero no puedo encontrarlo :(.
Adam
2
@ Adam, está en la página Pull Request. Entonces, el tenedor abriría una Solicitud de extracción para fusionar una de sus ramas con una de las suyas. Allí puede hacer clic en el botón de combinación.
Rob Barreca
2
El botón Avance rápido ya no parece estar disponible. Para información, he usado otra URL de git dentro de mi comando:git remote add snaury [email protected]:snaury/script-runner
olibre
72

Entonces la respuesta aceptada arriba no funcionó para mí perfectamente. Es decir, parecía perder el enlace con el autor original de Github cuando funcionaba, y luego no parecía funcionar más después de eso. Creo que el problema fue que la respuesta omitió el / entre el nombre remoto y la rama. Por lo tanto, buscaría una rama llamada maestra desde el control remoto, pero luego no podría hacer nada con ella. No estoy seguro de por qué.

Esta es la forma en que github recomienda desde su sitio .

Una vez que haya clonado su repositorio bifurcado, debe agregar un puntero remoto al original como decía la respuesta anterior. Les gusta llamarlo río arriba, pero no importa.

git remote add upstream git://github.com/octocat/Spoon-Knife.git

Entonces traes

git fetch upstream

y verás las versiones disponibles para fusionar

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/master

Luego solo tiene que elegir la rama en la que desea fusionarse. Tenga en cuenta que estas no son ramas locales, se almacenan bajo control remoto. Pero siempre que no tenga una sucursal local llamada upstream / master (que está permitido), debería fusionarse bien con la línea a continuación:

git merge upstream/master

Alternativamente, podría atajar la búsqueda / fusión (después de la búsqueda inicial al menos) con esta línea:

git pull upstream/master
Bob Spryn
fuente
El problema es que si ya tiene cambios, los cambios que incorpore crearán una confirmación de fusión. Útil en algunos casos, pero la mayoría de las veces un poco inútil.
Pablo Olmos de Aguilera C.
1
En los casos de uso git rebaseque funcionaría mucho mejor, y dejar de lado esas confirmaciones combinación feo vacío
Fruch