2010-10-11 11 views
489

Abrí el repositorio de alguien en GitHub y me gustaría actualizar mi versión con confirmaciones y actualizaciones realizadas en el repositorio original. Estos fueron hechos después de que bifurqué mi copia.Extraiga nuevas actualizaciones del repositorio original de GitHub en el depósito bifurcado de GitHub

¿Cómo puedo incorporar los cambios que se realizaron en el origen e incorporarlos a mi repositorio?

+1

Posible duplicar, o tal vez solo relacionado: [Fusión entre horquillas en GitHub] (http://stackoverflow.com/questions/1123344/merging-between-forks-in-github). –

+0

En caso de que haya etiquetas adicionales que desee sincronizar, ¡haga 'git push --force origin --tag' después de las soluciones propuestas! – MediaVince

Respuesta

575

Tiene que agregar el repositorio original (el que ha bifurcado) como control remoto.

Desde el GitHub fork man page:

fork

Una vez que el clon es completa tu repositorio tendrá una llamada remota “origin” que apunta a su tenedor en GitHub.
No dejes que el nombre te confunda, esto no apunta al repositorio original del que extrañaste. Para ayudar a mantener un registro de esa repo vamos a añadir otra llamada remota “aguas arriba”:

$ cd github-services 
$ git remote add upstream git://github.com/pjhyett/github-services.git 
$ git fetch upstream 

# then: (like "git pull" which is fetch + merge) 
$ git merge upstream/master master 

# or, better, replay your local work on top of the fetched branch 
# like a "git pull --rebase" 
$ git rebase upstream/master 

Tiene también un ruby gem which can facilitate those GitHub operations.

forked

Véase también "Git fork is git clone?".

+12

Consulte también http://bassistance.de/2010/06/25/git-fu-updating-your-github-fork/ para obtener un buen resumen. – VonC

+2

Pásame al golpe por 40 segundos. Necesito trabajar en mi teclado-fu. :-) –

+0

necesito agregar 'git merge' después de' git fetch upstream' –

82

Además de la respuesta de VonC, podría ajustarla a su gusto aún más.

Después de recuperar de la rama remota, aún tendría que fusionar las confirmaciones. Me reemplazaría

$ git fetch upstream 

con

$ git pull upstream master 

desde git pull es esencialmente git fetch + git merge.

+0

¿Qué sucede si sé que la rama ascendente no tiene ningún cambio en los archivos existentes, pero solo se agregaron algunos archivos de recursos? Todavía necesito fusionar? – Zec

+3

Seguramente solo hará un avance rápido en ese caso – Domness

+0

cómo hace que * upstream master * sobrescriba todos los archivos locales (por lo que no hay conflictos de fusión) upstream maestro está liderando en el código en este caso, así que confiamos en él 100% ... han logrado hacer esto –

56

Este video muestra how to update a fork directly from GitHub

pasos:

  1. Abra su tenedor en GitHub.
  2. Haga clic en Pull Requests.
  3. Haga clic en New Pull Request. Por defecto, GitHub comparará el original con su tenedor, y no debería haber nada para comparar si no hizo ningún cambio.
  4. Haga clic en switching the base. Ahora GitHub comparará tu tenedor con el original, y deberías ver todos los últimos cambios.
  5. Haga clic en Create a pull request para esta comparación y asigne un nombre predecible a su solicitud de extracción (por ejemplo, Actualización del original).
  6. Haga clic en Create pull request.
  7. Desplácese hacia abajo y haga clic en Merge pull request y finalmente Confirm merge. Si su tenedor no tuvo ningún cambio, podrá fusionarlo automáticamente.
+1

eso es más útil (y) –

+2

Desafortunadamente, este buen método gráfico crea un ruido adicional en el tenedor como se mencionó anteriormente en los comentarios de la respuesta aceptada. Por lo tanto, se recomienda el método de la línea de comandos: https://help.github.com/articles/syncing-a-fork/ –

27

Uso:

git remote add upstream ORIGINAL_REPOSITORY_URL 

Esto establecerá su aguas arriba en el repositorio fork de. Luego haga lo siguiente:

git fetch upstream  

Esto obtendrá todas las ramas incluyendo maestra del repositorio inicial.

Combinar estos datos en su sucursal local master:

git merge upstream/master 

empujar los cambios en el repositorio de horquilla es decir, a origen:

git push origin master 

Voila! Has terminado con la sincronización del repositorio original.

+0

cómo uno hace que el maestro de upstream sobrescriba todos los archivos locales (por lo que no hay conflictos de fusión) el maestro de upstream dirige el código en este caso, así que confiamos en que el 100% ... hemos logrado hacer esto –

1

Si está utilizando la aplicación de escritorio GitHub, hay un botón de sincronización en la esquina superior derecha. Haga clic en él y luego Update from <original repo> cerca de arriba a la izquierda.

Si no hay cambios que sincronizar, esto estará inactivo.

Aquí están some screenshots para hacer esto fácil.

Cuestiones relacionadas