web-dev-qa-db-fra.com

Git Pull me demande d'écrire un message de fusion

Je tire de ma branche :

git checkout mybranchSample
git fetch
git pull Origin master

Ensuite, Git me donne le message suivant:

Veuillez saisir un message de validation pour expliquer pourquoi cette fusion est nécessaire,
surtout s'il fusionne une mise à jour en amont dans une branche de sujet

Et après avoir entré un message de validation, il fusionne master dans mes fichiers. Et même si je n'ai pas travaillé sur certains fichiers de master, il affiche la liste des fichiers en vert lorsque je tape git status.

Ce problème ne se produit pas avec mes collègues, mais moi uniquement. Quelle peut être la raison derrière cela?

35
Pratik

git pull est essentiellement deux actions à la fois: git fetch suivi d'un git merge (sauf si vous utilisez git pull --rebase, auquel cas vous pouvez deviner ce qui se passe).

La raison pour laquelle vous voyez cela est que Git ne peut pas faire une fusion avance rapide, comme il le peut la plupart du temps. La raison en est généralement parce que vous avez git committed localement à la branche que vous essayez de tirer, et maintenant vous devez fusionner les modifications distantes avec vos modifications locales.

Il convient également de noter que Git a pré-rempli le message de fusion pour vous, vous n'avez donc pas vraiment besoin de taper quoi que ce soit. Enregistrez et quittez, et la fusion devrait être terminée. (À moins, bien sûr, qu'il n'y ait des conflits de fusion).

38
Madara Uchiha

Linus Torvalds l'explique le mieux:

Faire passer le mot sur un changement d'interface utilisateur "git" à venir, car je suis largement à blâmer.

J'espère que ce changement amènera les gens à écrire des messages de fusion pour expliquer leurs fusions, et peut-être même décider de ne pas fusionner du tout quand ce n'est pas nécessaire.

J'utilise cette fonctionnalité git depuis quelques semaines maintenant, et cela a entraîné mes fusions de sous-gestionnaires ayant diverses notes (enfin, au moins si le sous-gestionnaire m'en a donné). J'essaie donc de donner l'exemple.

Mais si vous n'aimez pas expliquer vos fusions, cela pourrait être ennuyeux. Bien sûr, si vous n'expliquez pas vos fusions, vous êtes ennuyeux, donc tout se termine à la fin. "L'équilibre karmique", pour ainsi dire.

Source: https://plus.google.com/+LinusTorvalds/posts/SrePhcj6XJe

25
tne

Si vous essayez de fusionner la branche master vers la branche mybranchSample, cela est parfaitement normal.

Git fusionne master en mybranchSample (quand vous avez fait git pull Origin master from mybranchSample branch) and commits la fusion change pour vous (sauf en cas de conflit) et vous donne le message pré-rempli. Vous pouvez simplement enregistrer et quitter.

MAIS Si vous tentiez simplement d'obtenir le dernier code de la branche distante master pour la fusionner avec la branche locale master, vous devez alors passer à master puis tirer de master.

de votre déclaration

il fusionne les fichiers maîtres dans mes fichiers. Et même si je n'ai pas travaillé sur certains fichiers de master, il affiche la liste des fichiers en vert lorsque je tape git status.

Je pense que vous essayez de faire le deuxième.

alors essayez:

git checkout master
git pull Origin master
3
Anand S

Je pense que vous avez un problème avec les branches ... Les 2 scénarios possibles auxquels je pourrais imaginer que vous êtes confrontés:

1) Vous avez une branche distante, mybranchSample, et vous voulez y travailler - vous n'avez rien à faire pour le moment avec la branche master (c'est-à-dire que vous ne voulez pas fusionner votre branche en master ou vice vice versa). Vous dites dans votre question

Quand je tire de ma branche après fetch comme ...

Mais ce que vous faites, c'est git pull Origin master, qui tire de master. Au lieu de cela, vous devriez pouvoir, avec la version git> = 1.6.6, extraire votre branche distante en utilisant

git fetch
git checkout mybranchSample

2) Vous essayez de travailler sur mybranchSample mais vous voulez avoir le dernier code de la branche master là-bas. Ensuite, il est logique qu'une fusion puisse être nécessaire, comme l'a dit Anand S.

3
misch

La raison pour laquelle cela ne vous arrive pas n'est pas que votre configuration est différente, mais que la branche dans laquelle vous fusionnez est différente.

La raison des fichiers dans le diff que vous n'avez pas modifiés est qu'après une fusion, le nouveau commit doit être parent: le commit que vous avez fait en dernier et le plus récent commit sur master. Le nouveau commit contient toutes les modifications/fichiers . Donc, si vous différez de nouvea à votre dernier commit vous verrez tous les fichiers modifiés/ajoutés qui ont été modifiés/ajoutés sur le maître alors que votre branche n'était pas synchronisée avec le branche principale.

2
Martin Rauscher