Comment puis-je resynchroniser une fourchette à partir de l'original


33

Je viens de lancer un projet dans Github. J'ai apporté des modifications et envoyé une demande de tirage. Le propriétaire a fusionné ma fourche avec le projet principal et a ensuite apporté quelques modifications. Donc, pour l'instant, ma fourche n'est pas mise à jour avec le projet principal. Les modifications qu’il a apportées après la fusion de ma demande de traction me manquent. Comment puis-je mettre à jour mon fork avec le projet Main? Y at-il un moyen de faire cela dans l'interface Web?

Merci


J'écris une instruction simple. Découvrez ici: webapps.stackexchange.com/a/58140/63016
Youngjae

2
Il y a maintenant un document officiel qui est bien fait: help.github.com/articles/syncing-a-fork
Andre Miras

Réponses:


36

De par sa conception, le bricolage d'un projet crée un référentiel séparé qui n'est pas mis à jour lorsque le référentiel d'origine est modifié. Cependant, gitil est assez facile de mettre à jour manuellement.

Vous avez besoin de l'aide d'un 3ème référentiel (votre copie locale suffit). Il y a 3 pensions:

  • "En amont": le référentiel du projet en amont sur Github.
  • "Origin": le dépôt de votre fork sur Github
  • "Local": votre référentiel local sur votre ordinateur. Je suppose que vous l'avez créé en clonant Fork en utilisant git clone git@github.com:your-username/projectname.git, et que tout le monde utilise branch master.

En supposant qu'actuellement "Origine" et "Local" se trouvent dans le même état et que "En amont" est en avance de 1 ou plusieurs validations (la fusion et les modifications ultérieures).

Premièrement, ajoutez le projet en amont en tant que télécommande Git :

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

Extrayez ensuite (ce qui signifie chercher et fusionner automatiquement) les modifications de la masterbranche distante dans la branche current ( master) de votre référentiel local :

git pull upstream master

Votre référentiel local est maintenant synchronisé avec upstream. Enfin, placez votre dépôt local sur votre fourche Github:

git push origin master

Maintenant tout est synchronisé.


2
Merci beaucoup .. il est dommage que cela ne soit pas possible de le faire dans l'interface Web ..
Ban

1
C'est en effet possible sur l'interface Web: webapps.stackexchange.com/a/31010/10390
thSoft

Yeehaw! J'étais en train de m'arracher les cheveux en essayant de trouver cette information explicite. Merci d'avoir partagé!
pepoluan

... mais regardez aussi les commentaires de la réponse, prouvant que la resynchronisation via le Web n'est pas la meilleure option car elle pollue le référentiel
usr-local-ΕΨΗΕΛΩΝ

que faites-vous quand il est dit "déjà à jour" après le pull, mais ce n'est évidemment pas? (il y a des fichiers que j'ai tous modifiés dans un sous-répertoire, et je ne devrais avoir aucune différence dans les autres fichiers, mais c'est le cas)
roberto tomás

1

Vous devez ajouter une télécommande (voir l' aide de GitHub ) et extraire de cette nouvelle télécommande.

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

0

J'ai trouvé cette réponse complémentaire à la réponse initiale, car elle ne concerne que la synchronisation d'une branche (maître). De plus, si la branche a été créée en amont depuis votre fork, il est un peu plus compliqué de la créer sur votre fork.

En bref, pour mettre à jour votre branche avec chaque branche du référentiel en amont, exécutez cette commande.

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

Ce que cela ne fait pas, c'est supprimer toutes les branches de votre fourche qui ont été supprimées de l'amont. Il n’ya aucun moyen de l’automatiser, surtout si vous avez créé des branches sur votre fourche.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.