2017-01-13 1 views
0

Je ne comprends pas pourquoi ma fusion est la mise à jour d'un commit ... il cherche à mettre à jour la validation Add Color, pas la fusion de master avec des pièces de monnaie. Sublime ne ressort pas lorsque j'essaie de fusionner ces branches. Tout le monde peut m'aider? De plus, quand je tape git commit, j'ai:Git, la fusion des branches git

Sur la branche principale Votre branche est devant 'origin/master' par 2 commits. (utilisation « push git » pour publier vos commits locaux) rien à commettre, arbre de travail propre

enter image description here

+0

Est-ce que "Votre branche est à jour avec 'origine/master'" indique qu'il n'y a rien à tirer? –

+0

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

Répondre

1

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 coinsn'a pas dire de fusionner master en coins. Il est dit de fusionner masteretcoins 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.