Me bifurcada alguien del repositorio en GitHub y quisiera actualizar mi versión con el cometa y las actualizaciones realizadas en el repositorio original. Estas fueron hechas después de que me bifurcada mi copia.

¿Cómo puedo tirar en los cambios que se hicieron en el origen y la incorporamos en mi repositorio?

InformationsquelleAutor why | 2010-10-11

5 Comentarios

  1. 658

    Tienes que añadir el repositorio original (el que bifurcada) como mando a distancia.

    De la GitHub tenedor página man:

    Tire de las nuevas actualizaciones de original repositorio de GitHub en bifurcada repositorio de GitHub

    Una vez que el clon es completar su repo tendrá un control remoto llamado «origin» que apunta a su fork en GitHub.

    No dejes que el nombre se confunda, esto no apunta a la original repo que bifurcada de. Para ayudar a mantener un registro de que repo vamos a agregar otro control remoto denominado «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
    

    También tiene un gema de ruby que pueden facilitar esas operaciones de GitHub.

    Tire de las nuevas actualizaciones de original repositorio de GitHub en bifurcada repositorio de GitHub

    Véase también «Git horquilla es git clone?«.

    • Véase también bassistance.de/2010/06/25/git-fu-updating-your-github-fork para un buen resumen.
    • necesita agregar git merge después de git fetch upstream
    • Yo prefiero un git rebase upstream/master, pero he añadido las dos posibilidades en la respuesta.
    • Si usted tiene local se compromete, no esto crea feo «Merge de la rama ‘master’ de github.com:usuario/repo» comete cada vez que se intenta obtener las actualizaciones de la parte de arriba? Usted puede reajustar seguro, pero si usted empuja los cambios a su bifurcada repo en github, significa que la próxima vez que usted simplemente no puede rebase sin la regeneración de los valores hash para cada commit transformar todo en un lío.
    • si usted tiene bifurcada en una operación repo, se está trabajando en su repo, en su de la rama de reajuste y una fuerza de empuje: no hay lío involucrados. Incluso un pull request en el progreso sería actualizado correctamente.
    • Sí, pero si trato de mantener actualizado con «aguas arriba», usted no puede (limpiamente al menos afaik) sin crear Merge branch 'master' of github.com:user/repo. Tal vez yo no podía explicarme a mí mismo lo suficientemente bueno.
    • No se si pull --rebase: no «merge de la rama» master allí.
    • Tal vez me estoy perdiendo algo… primera vez cuando he local de cambios tengo que hacer un pull --rebase upstream master (de pie en mi rama), mis cambios se trasladó a la punta, y los cambios de la parte de arriba hay (manteniendo sus hashes). Entonces me git push a mi tenedor, todo muy bien. La próxima vez que intente pull --rebase de aguas se muevan (de nuevo) los cambios en la punta, y por lo tanto, cambiar el hash. Ahora no voy a ser capaz de empujar en github, sin forzar, la creación de un lío. (Quiero decir, el «no rebase si usted tiene una historia pública).
    • no se hace un lío: usted git push --force, en sustitución de la historia de su sucursal en GitHub por su sucursal local sólo rebasada. Ya que sólo se está utilizando triste rama, no hay lío está involucrado.
    • si usted está usando github, se asume que tal vez algún día alguien podría utilizar su trabajo (si no… ¿qué hay de la idea de empujar sus modificaciones en un repositorio público?). Ese es el punto de mantener un tenedor, agregar los cambios, pero mantener la actualización de aguas arriba.
    • nope, no para un tenedor, no de una rama que se están utilizando para un pull request. Rebase sin miedo. Esa es la manera de «mantener la actualización de aguas». Si usted tiene otros colaboradores, que necesitan para trabajar desde su propio tenedor, no directamente en el propio. Es su rama, su solicitud de extracción. Reajuste de la que tantas veces como necesite.
    • Yo entiendo. Me refiero a que si alguien quiere seguir mis tenedor… van a tener problemas para tirar de la historia en mi horquilla que va a ser (aguas arriba + mis cambios). Desde mi cometen los hash será diferente cada vez que me empuje a ello. De todos modos, no se parece un poco absurdo que se supone que debo git push --force en cada momento? FWIW, lo más cercano que he encontrado es este: blog.bleeds.info/sofa/_design/sofa/_list/post/…
    • «no se parece un poco absurdo que se supone que debo git push –vigor en cada momento»: absolutamente no. Es por eso que su solicitud de extracción sería actualiza automáticamente: para permitir el reajuste y la estancia en la parada de la rama de aguas arriba. Si alguien sigue el tenedor… que él/ella debe fork, y el reajuste de su propia rama en la parte superior de la suya (la cual es posible, y que incluso será más fácil con git 1.9: stackoverflow.com/a/20423029/6309)
    • Yo entiendo. Yo todavía creo que es difícil, que no son triviales y no intuitiva. Aún así es raro que mis cambios serán siempre en la parte superior (el pasado), mientras que en realidad fueron hechas antes. La solución que he publicado antes de que se ve mejor (todavía no trivial demasiado). El problema es que cometen los hash cambios (obviamente, ya que hay un nuevo padre) y genera una gran cantidad de ruido en el interior de github cuando los problemas están siendo llamados. Todavía me sorprende que no existe una manera de permanecer actualización de arriba y administrar su propio tenedor sin crear sentido de combinación comete o «mentir» sobre la historia.
    • acerca de la historia?? Pero el autor la fecha no cambia: stackoverflow.com/a/6340994/6309
    • mi mal. Tienes razón acerca de eso. Es raro, a mirar el registro en orden de confirmación (como en github) y ver mi cambio fue la «última». He leído sus comentarios en tus enlaces, todavía no estoy tristemente, parece demasiado trabajo para algo que debería ser sencillo. Pero entiendo que el «problema» es github y el modelo de datos (en otras palabras, no hay mucho que hacer).
    • Funciona gracias 🙂 Así que «remotos» en realidad se utilizan para identificar a las horquillas de original repo ?
    • Sí, usted puede tener muchos remoto como usted desee, para hacer referencia a diferentes repositorios. Aquí, que owuld ser la referencia de la repo original que se bifurcó.
    • ¿Para hacer qué? No olvide que usted no es el propietario de la repo original, de modo que usted no puede empujar a él directamente. Por lo tanto, la confirmación empujado a la horquilla (que tengas).
    • OK. Puedes publicar que como una pregunta nueva, con una clara ilustración de la extra commit (la calabaza uno?) usted quiere evitar. Esto será más claro enterrados en los comentarios 😉
    • algo en tu caso debe ser diferente. Por lo que este debe ser OK
    • Aquí está la pregunta stackoverflow.com/q/44583721/3734690

  2. 96

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

    Después de la captura de la rama remota, usted todavía tiene que combinar los comete. Yo sustituiría

    $ git fetch upstream
    

    con

    $ git pull upstream master
    

    desde git pull es esencialmente git fetch + git merge.

    • Lo que si sé que aguas arriba de la rama no tiene ningún tipo de cambios en los archivos existentes, pero sólo unos pocos archivos de recursos agregado aún puedo combinar?
    • Seguramente va a hacer un avance rápido en ese caso
    • ¿cómo puede uno hacer aguas arriba master sobrescribir todos los archivos locales (así que no hay conflictos de subida maestro es líder en el código, en este caso, por lo que confiamos en que el 100% … han logrado hacer esto
    • reajuste de subida master tenga en cuenta que esto no está libre de conflictos, si usted tiene suficientemente alejado de upstream/master. Consulte git-scm.com/docs/git-rebase (tl;dr: este duro restablece tu maestro para que los de arriba, y, a continuación, intenta reinstalar todo el local se compromete desde el punto de divergencia hacia adelante)
  3. 62

    Este video muestra cómo actualizar un tenedor directamente desde GitHub

    Pasos:

    1. Abrir su fork en GitHub.
    2. Haga clic en Pull Requests.
    3. Haga clic en New Pull Request. De forma predeterminada, GitHub va a comparar el original con su tenedor, y no hay nada para comparar si usted no realizar cambios.
    4. Haga clic en switching the base. Ahora GitHub comparará la horquilla con el original, y usted debería ver los últimos cambios.
    5. Haga clic en Create a pull request para esta comparación y asignar una predicción nombre a su solicitud de extracción (por ejemplo, Actualizar desde original).
    6. Haga clic en Create pull request.
    7. Desplácese hacia abajo y haga clic en Merge pull request y finalmente Confirm de mezcla. Si la horquilla no tiene ningún cambio, usted será capaz de combinar de forma automática.
    • Desafortunadamente, este método gráfico crea ruido añadido en su tenedor como se mencionó anteriormente en los comentarios de la aceptó respuesta. Por lo tanto el método de línea de comandos se recomienda: help.github.com/articles/syncing-a-fork
  4. 52

    Uso:

    git remote add upstream ORIGINAL_REPOSITORY_URL
    

    Esto hará que tu arriba de el repositorio bifurcada de.
    Luego de hacer esto:

    git fetch upstream      
    

    Esto obtendrá todas las ramas, incluyendo master del repositorio original.

    Combinar estos datos en su local de la rama master:

    git merge upstream/master
    

    Enviar los cambios a su bifurcada repositorio es decir, al origen:

    git push origin master
    

    Voila! Está hecho con la sincronización el repositorio original.

    • ¿cómo puede uno hacer aguas arriba de maestro de sobrescribir todos los archivos locales (así que no hay conflictos de subida maestro es líder en el código, en este caso, por lo que confiamos en que el 100% … han logrado hacer esto
  5. 1

    Si estás usando GitHub aplicación de escritorio, hay un botón sincronizar en la esquina superior derecha. Haga clic en él, a continuación, Update from <original repo> cerca de la parte superior izquierda.

    Si no hay cambios que se deben sincronizar, este va a ser inactivo.

    Aquí se algunas capturas de pantalla a hacer esto fácil.

Dejar respuesta

Please enter your comment!
Please enter your name here