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
?)
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.
J'ai découvert que c'était:
$ git fetch upstream
$ git merge upstream/master
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
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