Git pull me demande d'écrire un message de fusion
Je tire à partir de ma branche:
git checkout mybranchSample
git fetch
git pull origin master
Ensuite, Git me donne le message suivant:
Veuillez entrer un message de validation pour expliquer pourquoi cette fusion est nécessaire,
surtout si elle fusionne une upstream mise à jour 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 est Pas qui se passe avec mes collègues, mais moi seulement. Quelle peut être la raison derrière tout cela?
5 réponses
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 ceci est parce que Git ne peut pas faire une fusion fast-forward, comme il le peut la plupart du temps. La raison en est généralement que vous avez git commit
ted localement à la branche que vous essayez de tirer, et maintenant vous devez fusionner les modifications distantes avec vos modifications locales.
Il est également intéressant de noter que Git a pré-rempli le fusionner message pour vous, de sorte que vous n'avez pas vraiment besoin de taper quoi que ce soit. Il suffit d'enregistrer et de quitter, et la fusion devrait être terminée. (À moins, bien sûr, qu'il y ait des conflits de fusion).
Linus Torvalds l'explique le mieux:
Passer le mot sur un changement d'interface 'Git' à venir, puisque je suis en grande partie à blâmer.
Ce changement, espérons que les gens écrivent 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 le cas nécessaire.
J'utilise cette fonctionnalité git depuis quelques semaines maintenant, et a donné lieu à mes fusions de submaintainers ayant diverses notes dans eux (bien, au moins si l' submainter m'a donné tout). Donc, je suis en train de prêcher par 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 tous égalise en fin de compte. "Équilibre karmique", pour ainsi dire.
Source: https://plus.google.com/ + LinusTorvalds/posts / SrePhcj6XJe
Si vous essayez de fusionner master
à la branche mybranchSample
, alors c'est parfaitement normal.
Git fusionne master
à mybranchSample
(quand vous avez fait git pull origin master
de mybranchSample
branche) et commits
La Fusion change pour vous (sauf s'il y a un conflit) et vous donne le message pré-rempli. Vous pouvez simplement enregistrer et quitter.
Mais Si vous essayez simplement d'obtenir le dernier code de la branche distante master
pour fusionner avec la branche locale master
, alors vous devriez extraire à 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
Je pense que vous avez un problème avec les branches... Les 2 scénarios possibles que je pourrais imaginer auxquels 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 versa). Vous dites dans votre question
Quand je prends pull de ma branche après avoir récupéré comme ...
Mais ce que vous faites est git pull origin master
, qui tire de maître. Au lieu de cela, vous devriez pouvoir, avec Git version >= 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.
La raison pour laquelle cela ne vous arrive que n'est pas que votre configuration est différente, mais que la branche dans laquelle vous fusionnez est différente.
La raison pour laquelle les fichiers dans le diff que vous n'avez pas modifiés est qu'après une fusion, le nouveau commit doit être un commit parent: le commit que vous avez fait en dernier et le commit le plus récent sur master. Le nouveau commit contient Tous les changements / fichiers . Donc, si vous diff de nouveaux à votre dernier commit, vous verrez tous les fichiers modifiés/ajoutés que ont été modifiés / ajoutés sur master alors que votre branche était désynchronisée avec la branche master.