Fusionner des fourches dans GitHub


259

J'ai bifurqué un dépôt GitHub. Ensuite, j'ai poussé quelques changements à ma fourchette. Ensuite, le référentiel d'origine a fusionné mes modifications et quelques autres. Maintenant, je veux fusionner les changements qui me manquent. J'ai essayé une simple traction suivie d'une poussée, mais cela donne mes commits en double. Quelle est la meilleure façon de procéder?

Réponses:


352

Vous avez probablement une «télécommande» pour chaque référentiel. Vous devez tirer d'une télécommande et pousser vers l'autre.

Si vous avez cloné à l'origine à partir de votre fork, cette télécommande sera appelée "origine". Si vous ne l'avez pas déjà ajouté, vous devrez ajouter le référentiel de la première personne comme une autre télécommande:

git remote add firstrepo git://github.com/first/repo.git

Une fois que tout est installé, vous devriez en effet pouvoir

git pull firstrepo master
git push origin

Rappelez-vous, git pulln'est rien de plus qu'une macro qui le fait git fetchet git merge, dans cet ordre. Il vous suffit de récupérer la liste des validations dans le référentiel de la première personne, puis de fusionner leur branche dans votre arborescence. La fusion devrait faire la bonne chose avec vos commits sur les deux branches.

GitHub, dans toute sa splendeur perpétuelle, vous donne un raccourci, bien sûr. Il y a un bouton "avance rapide" sur votre fork du référentiel que vous pouvez utiliser pour rattraper votre fork si vous êtes entièrement fusionné de l'autre côté.


1
Existe-t-il un moyen de le faire entièrement avec des opérations à distance? Si je comprends bien, avec cette méthode, vous téléchargerez toutes les modifications dans le référentiel local, puis les téléchargerez (les repousserez) sur le fork de github. Je préfère simplement tirer en quelque sorte toutes les modifications directement dans la fourche sur github.
Ken Liu

1
Non. Git ne le supporte pas. Heureusement, Github a maintenant un bouton de fusion dans l'interface Web.
cweiske

13
@cweiske - où est ce bouton de fusion? J'ai regardé tout au long des pages d'administration et des pages principales, mais je ne le trouve pas :(.
Adam

2
@Adam, c'est sur la page Pull Request. Le forker ouvrirait donc une Pull Request pour fusionner l'une de ses branches avec la vôtre. Là, vous pouvez cliquer sur le bouton de fusion.
Rob Barreca

2
Le bouton Avance rapide ne semble plus être disponible. Pour information, j'ai utilisé une autre URL git dans ma commande:git remote add snaury git@github.com:snaury/script-runner
olibre

72

Donc, la réponse acceptée ci-dessus n'a pas fonctionné parfaitement pour moi. À savoir, il a semblé perdre le lien avec l'auteur original de Github quand cela a fonctionné, puis n'a plus semblé fonctionner après cela. Je pense que le problème était que la réponse laissait de côté le / entre le nom distant et la branche. Il récupère donc une branche appelée master depuis la télécommande, mais ne peut rien faire avec. Je ne sais pas vraiment pourquoi.

Voici la façon dont github recommande depuis leur site .

Une fois que vous avez cloné votre dépôt fourchu, vous devez ajouter une télécommande pointant vers l'original comme l'a dit la réponse précédente. Ils aiment l'appeler en amont, 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/master

Ensuite, il vous suffit de choisir la branche dans laquelle vous souhaitez fusionner. Attention, ce ne sont pas des branches locales, elles sont stockées sous des télécommandes. Mais à condition que vous n'ayez pas de branche locale appelée amont / maître (ce qui est autorisé), vous devriez bien fusionner avec la ligne ci-dessous:

git merge upstream/master

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

git pull upstream/master

Le problème est que si vous avez déjà des modifications, les modifications que vous incorporerez créeront une validation de fusion. Utile dans certains cas, mais la plupart du temps un peu inutile.
Pablo Olmos de Aguilera

1
Dans ces cas, git rebasecela fonctionnerait beaucoup mieux et laisserait de côté les vilains commits de fusion vides
Fruch
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.