2009-12-13 10 views
3

Je suis assez nouveau pour git. Il y a quelques minutes, j'ai effectué une fusion sur deux branches; appelons-les A et B. J'étais sur la branche A; ma commande suivante était 'git merge B'. Il a dit qu'il y avait un conflit, mais j'ai regardé dans le dossier et il n'y avait pas de marqueurs de conflit. J'ai ajouté le fichier, j'ai validé la modification et j'ai refait la commande de fusion. "Déjà à jour" est le message que je reçois.Problèmes d'utilisation de git merge

Cependant, aucune fusion ne semble avoir eu lieu. Les deux branches existent toujours, et les deux sont exactement ce qu'elles étaient avant la fusion.

Qu'est-ce que j'ai fait de mal? Et comment puis-je faire fusionner ces deux branches avec succès?

Merci.

Répondre

1

Je ne suis pas sûr de votre conflit initial, sauf était sur un fichier à la fois enlevé en temps re-ajouté en B. Le message d'erreur exacte peut aider ici (avec votre version Git)

Fusion de deux Les branches ne signifient pas que l'on va disparaître, seulement que leur histoire sera liée par un nouvel engagement apportant toutes les différences d'une branche à l'autre.

« déjà à jour » désigne tous les changements de B sont maintenant déjà dans A.
En d'autres termes, B est un parent de A. (gitk devrait être en mesure de vous montrer que)

Puisque vous avez ajouté le fichier dans A, la branche A ne devrait pas ressembler exactement à ce qu'elle était avant la fusion.

2

Il a dit qu'il y avait un conflit, mais j'ai regardé dans le fichier et il n'y avait pas de marqueurs de conflit. Sans plus de détails sur ce que Git a dit (le message sur le conflit), je ne peux que deviner ce qui s'est passé. Et je suppose que Git a dit qu'il y avait un conflit textuel (contexte) qu'il était capable de résoudre automatiquement, ou le conflit était de la variété au niveau de l'arbre comme par exemple CONFLICT (delete/modify) où un côté a supprimé le fichier et l'autre côté l'a modifié. J'ai ajouté le fichier, j'ai validé la modification et j'ai refait la commande de fusion. "Déjà à jour" est le message que je reçois.

Si une branche dans l'ancêtre de l'autre, vous obtiendrez une situation d'avance ou de mise à jour. Git refuse de faire des fusions inutiles à moins d'une demande explicite.

Si vous voulez refaire une comitted fusion, vous devez d'abord l'annuler:

git reset --hard HEAD^ 
git merge B 

Juste au cas où vous avez décidé que la résolution que vous avez fait était bon: il y a reflog (git reflog) juste au cas où tu changes d'avis.

+0

Êtes-vous sûr de 'HEAD ^'? Ne serait-ce pas jeter le dernier commit ou branche "A" si le commit de fusion n'a pas été créé? – Bombe

+0

Je prenais à propos de la fusion créée (créée) - J'ai édité la réponse pour la clarifier. Si la fusion n'était pas validée, elle serait 'git reset --hard HEAD' et' rm .git/MERGE_HEAD'. –