web-dev-qa-db-fra.com

Comment fusionner un maître distant à une branche locale

J'ai une branche locale d'un projet ("configUpdate") que j'ai créée à partir du projet de quelqu'un d'autre et j'ai apporté beaucoup de modifications à celui-ci et j'aimerais fusionner les modifications apportées dans ma branche locale.

J'ai essayé

git pull --rebase Origin configUpdate

mais il n'a pas saisi les dernières modifications - comment puis-je fusionner les deux? (aussi pour les points bonus, qu'est-ce que j'ai fait avec la commande pull --rebase?)

213
Martyn

Que diriez-vous (en supposant que vous êtes actuellement sur configUpdate de branche):

git fetch
git rebase Origin/master

En un mot:

  • git merge branchname prend de nouveaux commits de la branche branchname et les ajoute à la branche actuelle. Si nécessaire, il ajoute automatiquement un commit "Fusionner".

  • git rebase branchname prend les nouveaux commits de la branche branchname et les insère "sous" vos modifications. Plus précisément, il modifie l’historique de la branche courante de sorte qu’il soit basé sur la pointe de branchname, avec toutes les modifications que vous avez apportées par la suite.

  • git pull est fondamentalement identique à git fetch; git merge Origin/master.

  • git pull --rebase est fondamentalement identique à git fetch; git rebase Origin/master.

Alors, pourquoi voudriez-vous utiliser git pull --rebase plutôt que git pull? Voici un exemple simple:

  • Vous commencez à travailler sur une nouvelle fonctionnalité.

  • Au moment où vous êtes prêt à appliquer vos modifications, plusieurs commits ont été forcés par d'autres développeurs.

  • Si vous git pull (qui utilise la fusion), vos modifications seront enterrées par les nouvelles validations, en plus d'une validation de fusion créée automatiquement.

  • Si vous git pull --rebase à la place, git transmettra rapidement votre maître à celui en amont, alors appliquera vos modifications par-dessus.

326
Joey Adams

J'ai découvert que c'était:

$ git fetch upstream
$ git merge upstream/master
74
Martyn

Basculer vers votre agence locale

> git checkout configUpdate

Fusionner le maître distant à votre branche

> git rebase master configUpdate

Si vous avez des conflits, corrigez-les et, pour chaque fichier en conflit, exécutez la commande

> git add [path_to_file/conflicted_file] (par exemple, git add app/assets/javascripts/test.js)

Continuer rebase

> git rebase - continuer

33
Serge Seletskyy

git rebase ne semblait pas fonctionner pour moi. Après que git rebase, lorsque j'essayais de transmettre les modifications à ma branche locale, je continuais à recevoir une erreur ("indice: les mises à jour ont été rejetées car la pointe de votre branche actuelle se trouve derrière sa contrepartie distante. Intégrez les modifications distantes (par exemple, 'git pull. .. ') avant de pousser à nouveau. ") même après avoir tiré. Ce qui a finalement fonctionné pour moi a été la fusion de git.

git checkout <local_branch>
git merge <master> 

Si vous êtes un débutant comme moi, voici un bon article sur git merge vs git rebase. https://www.atlassian.com/git/tutorials/merging-vs-rebasing

12
AJC