¿Cómo puedo resincronizar un tenedor del original?

33

Acabo de bifurcar un proyecto en Github. Hice modificaciones y envié una solicitud de extracción. El propietario fusionó mi tenedor con el proyecto principal y luego realizó algunas modificaciones. Entonces, por ahora, mi bifurcación no está actualizada con el proyecto principal. Echo de menos las modificaciones que hizo después de fusionar mi solicitud de extracción. ¿Cómo puedo actualizar mi bifurcación con el proyecto principal? ¿Hay alguna manera de hacerlo en la interfaz web?

Gracias

prohibición
fuente
Escribo una instrucción simple. echa un vistazo aquí: webapps.stackexchange.com/a/58140/63016
Youngjae
2
Ahora hay un documento oficial que está bien hecho: help.github.com/articles/syncing-a-fork
Andre Miras

Respuestas:

36

Por diseño, bifurcar un proyecto crea un repositorio separado que no se actualiza cuando cambia el repositorio original. Sin embargo, githace que sea bastante fácil actualizar manualmente.

Necesita la ayuda de un tercer repositorio (su copia local es suficiente). Hay 3 repositorios:

  • "Upstream": el repositorio del proyecto upstream en Github.
  • "Origen": el repositorio de tu fork en Github
  • "Local": su repositorio local en su computadora. Asumiré que lo creaste clonando Fork usando git clone [email protected]:your-username/projectname.git, y que todos están usando branch master.

Asumiendo que actualmente "Origen" y "Local" están en el mismo estado, y "Upstream" está adelante por 1 o más confirmaciones (la fusión y cualquier cambio posterior).

Primero agregue el proyecto ascendente como un control remoto Git :

git remote add upstream https://github.com/upstream-username/projectname.git

Luego, tire (es decir, busque y luego combine automáticamente) los cambios de la masterrama del control remoto en la rama actual ( master) de su repositorio local :

git pull upstream master

Ahora su repositorio local está sincronizado con upstream. Finalmente, empuje su repositorio local a su tenedor Github:

git push origin master

Ahora todo está sincronizado.

Caracol mecánico
fuente
2
Muchas gracias ... es una pena que esto no sea posible hacer eso en la interfaz web ...
BAN
1
De hecho, esto es posible en la interfaz web: webapps.stackexchange.com/a/31010/10390
thSoft
Yeehaw! Me había estado arrancando el pelo tratando de encontrar esta información explícita. ¡Gracias por compartir!
pepoluan
... pero mire también los comentarios de la respuesta, demostrando que Resync vía web no es la mejor opción ya que contamina el repositorio
usr-local-ΕΨΗΕΛΩΝ
¿Qué haces cuando dice "ya actualizado" después de la extracción, pero obviamente no lo es? (hay archivos que cambié todos en un subdirectorio, y no debería haber diferencias en ningún otro archivo, pero lo hago)
roberto tomás
1

Debe agregar un control remoto (consulte la ayuda de GitHub ) y extraerlo de ese nuevo control remoto.

git remote add mainProject https://github.com/user/mainProject
git pull mainProject master
VonC
fuente
0

Encontré esta respuesta para complementar la respuesta original, ya que solo se trata de sincronizar una rama (maestra). Además, si la rama se ha creado en el flujo ascendente desde su bifurcación, es un poco más complicado crearla en su bifurcación.

La respuesta corta es, para actualizar su bifurcación con cada rama en el repositorio ascendente, ejecute este comando.

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done

Lo que esto no hace es eliminar las ramas de su bifurcación que se han eliminado del flujo ascendente. No hay forma de automatizar eso, especialmente si ha creado ramas en su bifurcación.

Brian
fuente