Je ne sais pas ce que votre question est, mais pense qu'il ya deux choses qui se passent ici vous pourriez pas entièrement comprendre. D'abord, je ne pense pas git merge master coins
fait ce que vous pensez qu'il fait.
git merge master coins
n'a pas dire de fusionner master
en coins
. Il est dit de fusionner master
etcoins
dans la branche en cours d'extraction. C'est parce que master coins
est une liste de branches à fusionner dans la branche actuelle. From the docs ...
[git merge] intègre les changements des commits nommés (depuis l'époque de leur histoire divergé de la branche actuelle) dans la branche actuelle.
Si master
est extrait, il fusionne les pièces dans le maître. Si coins
est extrait, il fusionne master
en coins
. Si quelque chose d'autre est extrait, vous obtenez ce qu'on appelle une "fusion de poulpe" et tous les trois, master
, coins
, et la branche actuelle sont fusionnés ensemble dans ce qui est probablement un gros gâchis. En l'état, vous avez fusionné avec master
extrait, alors git merge master coins
est identique à git merge coins
. Vous avez fusionné coins
en master
ce qui, je pense, ce que vous vouliez, mais ça aurait pu mal tourner.
N'utilisez donc pas cette syntaxe; cela peut vous causer des ennuis, et il est difficile de savoir ce qui s'est réellement passé en regardant l'historique des commandes. Utilisez plutôt git checkout branch-to-merge-into; git merge branch-to-merge-from
. Donc, si vous voulez fusionner des pièces de monnaie en maître, git checkout master; git merge coins
.
Le prochain numéro concerne la fusion Fast Forward. C'est quelque chose que Git fait quand il n'y a pas besoin d'une fusion, quand les branches n'ont pas divergé. Par exemple, disons que vous avez eu cette ...
A - B - C - D - G [master]
\
E - F - H [feature]
Depuis master
a des changements qui ne sont pas en commun avec feature
(D et G), il doit fusionner. Ainsi, git checkout master; git merge feature
entraîne une nouvelle validation de fusion.
A - B - C - D - G - I [master]
\ /
E - F - H [feature]
Mais s'il n'y avait pas de nouveaux commits sur master
, vous avez ce (master
pointe du doigt C).
[master]
A - B - C - E - F - H [feature]
feature
est dit ne pas avoir divergé de master
. Il n'y a pas besoin d'un commit de fusion, donc Git ne s'en soucie pas. Lorsque vous faites git checkout master; git merge feature
déplace simplement master
il à H.
[master]
A - B - C - E - F - H [feature]
Git peut le faire parce que « branches » sont vraiment juste étiquettes d 'pointant vers un engagement. Maintenant master
et feature
point au même commit.
Je recommande d'éviter les avances rapides lors de la fusion de branches car il perd des informations archéologiques importantes. Quelqu'un qui regarde le dépôt plus tard ne peut pas dire que E, F et H ont tous été faits comme une seule branche.
Je recommande de toujours fusionner les branches de fonctionnalité avec git merge --no-ff
. Cela oblige Git à commettre une fusion et quelqu'un qui essaie de comprendre votre code dans le futur peut savoir que E, F et H font partie d'un ensemble plus grand.
A - B - C --------- I [master]
\ /
E - F - H [feature]
La fusion commettras, je vous donne aussi un endroit pour décrire la branche et ajouter des choses comme un lien vers la question/bug/billet décrivant ce que la branche était pour.
Est-ce que "Votre branche est à jour avec 'origine/master'" indique qu'il n'y a rien à tirer? –
Pourriez-vous nous donner un 'git log --graph --decorate'? Cela montrera les têtes de branche et les connexions. Sinon, je ne suis pas sûr de savoir quelle est votre question? Cela ressemble à une [fusion rapide rapide] normale (http://stackoverflow.com/questions/2850369/why-does-git-fast-forward-merges-by-default#2850413) (c'est-à-dire qu'il n'y a pas de fusion nécessaire parce qu'il n'y a pas eu de changement de 'master' puisque les' coins' sont branchés, donc ça déplace simplement 'master' là où' pièces' est). Aussi, vouliez-vous fusionner 'master' en' pièces de monnaie 'et non 'pièces de monnaie' en' master'? – Schwern