293 votes

Fusion entre fourches dans GitHub

J'ai créé un dépôt GitHub. Puis j'ai poussé quelques changements dans mon dépôt. Puis le dépôt d'origine a fusionné mes modifications et d'autres. Maintenant, je veux fusionner les changements qui me manquent. J'ai essayé un simple pull suivi d'un push, mais cela donne mes commits en double. Quelle est la meilleure façon de procéder ?

397voto

Jim Puls Points 29289

Vous avez probablement un "remote" pour chaque dépôt. Vous devez tirer d'un dépôt distant et pousser vers l'autre.

Si vous avez cloné à partir de votre fork, cette télécommande sera appelée "origin". Si vous ne l'avez pas encore ajouté, vous devrez ajouter l'autre dépôt comme une autre télécommande :

git remote add <shortname> git://github.com/<ownerName>/repo.git

Une fois tout cela mis en place, vous devriez en effet pouvoir (github a changé la branche par défaut de master a main (à modifier si nécessaire)

git pull <shortname> master
git push origin

Rappelez-vous, git pull n'est rien d'autre qu'une macro qui fait git fetch y git merge dans cet ordre. Vous devez juste récupérer la liste des commits de l'autre dépôt et ensuite fusionner sa branche dans votre arbre. La fusion devrait faire la bonne chose avec vos commits sur les deux branches.

GitHub, dans toute sa splendeur perpétuelle, vous offre un raccourci, bien sûr. Il y a un bouton "fast-forward" sur votre fork du dépôt que vous pouvez utiliser pour rattraper votre fork si vous êtes entièrement fusionné dans l'autre côté.

1 votes

Existe-t-il un moyen de le faire entièrement avec des opérations à distance ? Si je comprends bien, avec cette méthode, vous allez télécharger toutes les modifications dans le dépôt local, puis les renvoyer (push) vers le fork sur github. Je préférerais d'une manière ou d'une autre tirer toutes les modifications directement dans le fork sur github.

1 votes

Non. Git ne supporte pas cela. Heureusement, Github dispose maintenant d'un bouton de fusion dans l'interface web.

13 votes

@cweiske - où se trouve ce bouton de fusion ? J'ai cherché partout dans les pages d'administration et les pages principales, mais je ne le trouve pas :(.

94voto

Bob Spryn Points 6886

La réponse acceptée ci-dessus n'a donc pas fonctionné parfaitement pour moi. En effet, elle semblait perdre le lien vers l'auteur github original lorsqu'elle fonctionnait, et ne semblait plus fonctionner ensuite. Je pense que le problème était que la réponse omettait le / entre le nom distant et la branche. Ainsi, il récupérait une branche appelée master à partir de la télécommande, mais n'était pas en mesure de faire quoi que ce soit avec elle. Je ne sais pas vraiment pourquoi.

Voici comment github recommande depuis leur site .

Une fois que vous avez cloné votre repo forked, vous devez ajouter un remote pointant vers l'original comme la réponse précédente l'a dit. Ils aiment l'appeler upstream, mais cela n'a pas d'importance.

git remote add upstream git://github.com/octocat/Spoon-Knife.git

Ensuite, vous allez chercher

git fetch upstream

et vous verrez les versions disponibles pour la fusion

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/main

Ensuite, il vous suffit de choisir la branche dans laquelle vous voulez fusionner. Attention, ce ne sont pas des branches locales, elles sont stockées dans des remotes. Mais si vous n'avez pas une branche locale appelée upstream/master (ce qui est autorisé), vous devriez pouvoir fusionner avec la ligne ci-dessous :

git merge upstream/main

Alternativement, vous pouvez raccourcir la récupération/fusion (après la récupération initiale au moins) avec cette ligne :

git pull upstream/main

0 votes

Le problème est que si vous avez déjà des modifications, les modifications que vous incorporez vont créer un commit de fusion. Utile dans certains cas, mais la plupart du temps un peu inutile.

2 votes

Dans ce cas, utilisez git rebase cela fonctionnerait beaucoup mieux, et éviterait ces vilains commits de fusion vides

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X