web-dev-qa-db-fra.com

Comment puis-je resynchroniser une fourchette d'origine

Je viens de fourrer un projet à Github. J'ai effectué des modifications et envoyé une demande de traction. Le propriétaire a fusionné ma fourchette avec le projet principal et après cela, il a apporté des modifications. Donc, pour l'instant ma fourchette n'est pas mise à jour avec le projet principal. Les modifications qu'il a faits me manquent après la fusion de ma demande de traction. Comment puis-je mettre à jour ma fourchette avec le projet principal? Y a-t-il un moyen de le faire dans l'interface Web?

Merci

34
bAN

Par conception, Forking Un projet crée un repo séparé qui n'est pas mis à jour lorsque le repo d'origine change. Cependant, git le rend assez facile à mettre à jour manuellement.

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

  • "En amont": le référentiel du projet en amont sur GitHub.
  • "Origine": le référentiel de votre fourchette sur GitHub
  • "Local": votre référentiel local sur votre ordinateur. Je suppose que vous l'avez créé en clonant la fourchette en utilisant git clone [email protected]:your-username/projectname.git, et que tout le monde utilise la succursale master.

En supposant que "l'origine" et "locale" sont dans le même état et "en amont" est en avance sur 1 ou plusieurs commits (la fusion et les modifications ultérieures).

Ajoutez d'abord le projet en amont en tant que GIT REMOTE :

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

Puis tirer (signification fetch , puis Fusionner automatiquement) les changements de la Remote master succursale dans la branche actuelle de votre référentiel local (master) succursale:

git pull upstream master

Maintenant, votre référentiel local est synchronisé avec upstream. Enfin, poussez votre repo local à votre fourchette Github:

git Push Origin master

Maintenant tout est en synchronisation.

38
Mechanical snail

J'ai trouvé cette réponse pour compléter la réponse originale car celle-ci ne traite que de synchroniser une branche (maître). De plus, si la branche a été créée sur l'amont depuis votre fourchette, il est un peu plus impliqué pour la créer sur votre fourchette.

La réponse courte est de mettre à jour votre fourchette 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 des branches de votre fourchette qui ont été supprimées de l'amont. Il n'y a aucun moyen d'automatiser cela surtout si vous avez créé des succursales sur votre fourchette.

0
Brian