Pourquoi git me demande-t-il un message de validation de fusion post-pull?

142

Récemment, après tout git pull, git a commencé à générer mon éditeur de texte et à demander un message de validation de fusion. Un message de validation est déjà pré-rempli, et je dois juste enregistrer et fermer la fenêtre pour terminer l'extraction.

Dans le passé, il effectuait la fusion en silence, avec un message de validation standard (du type de Merge branch 'dev' of remote.com:/repo into dev).

J'ai récemment mis à jour git vers la version 1.7.11.3 (via homebrew), mais je ne peux penser à rien d'autre que j'aurais pu faire pour changer ce comportement. S'agit-il d'un cadre, ou y a-t-il autrement un moyen de revenir à ce qu'il était?

Shanebonham
la source

Réponses:

157

Dans git 1.7.10, les développeurs de git ont décidé que les validations de fusion pouvaient être effectuées trop facilement. Comme expliqué dans cet article de blog, forcer le comportement du message de validation interactif devrait rendre ces messages de validation plus détaillés et pourrait réduire la fréquence globale des fusions inutiles.

Vous pouvez utiliser l' --no-editindicateur pour éviter ce comportement, mais non. Les commits de fusion, comme tous les commits dans l'historique, doivent être bien construits. Votre histoire ne devrait être qu'utile.

Christophe
la source
54
Merci pour l'aide. Je ne suis pas d'accord pour dire que les validations de fusion doivent toujours être descriptives. La raison pour laquelle j'ai recherché cela est parce que les fusions automatiques chaque fois que je tire me demandent d'expliquer pourquoi la fusion est nécessaire, ce qui devient rapidement déraisonnable car c'est même le cas lorsque je n'ai aucun changement.
Brian
10
C'est aussi une ressource utile pour éviter ce comportement: longair.net/blog/2009/04/16/git-fetch-and-merge Vous devriez éviter git pull; à utiliser git merge --ff-onlysi vous essayez simplement de mettre à jour et que vous ne pensez pas avoir de modifications locales; à utiliser git merge --no-ffsi vous essayez réellement de fusionner une branche.
Glyphe
6
Y a-t-il un indicateur de configuration pour désactiver cela? C'est ennuyeux de devoir taper --no-edit à chaque fois.
LandonSchropp
Impressionnant. Merci d'avoir partagé @Christopher.
LandonSchropp
3
@SeanCoetzee: Cela dépend de votre $EDITORréglage, mais si vous utilisez git prêt à l'emploi sur OSX, c'est probablement un programme appelé «vi» . Tapez ipour entrer en mode "INSERT"; tapez votre message. Vous pouvez ensuite enregistrer et quitter en appuyant sur ESCpuis en tapant :wq.
Christopher
58

Pour créer un raccourci pour une utilisation future, soit: -

Modifiez votre ~/.gitconfigavec ce qui suit:

[core]
    mergeoptions = --no-edit

Ou exécutez ce qui suit dans Terminal

git config --global core.mergeoptions --no-edit

Dallas Clark
la source
13
Cela n'a pas fonctionné pour moi (git sur OSX), et je l'ai configuré correctement, en regardant la sortie de git config --global core.mergeoptions.
jvannistelrooy
La commande de terminal devrait être comme cigit config core.mergeoptions --no-edit
S. Mert
@SimsekMert qui ne modifiera que le .gitconfig dans le référentiel actuel, pas globalement pour chaque référentiel git
Dallas Clark
@AbhishekGoel, il est possible que vous deviez redémarrer Terminal pour que les modifications prennent effet
Dallas Clark
@jvannistelrooy, il est possible que vous deviez redémarrer Terminal pour que les modifications prennent effet
Dallas Clark
11

Tout d'abord, tenez compte des avertissements dans la réponse de Christopher ci-dessus.

Ensuite, si vous souhaitez toujours désactiver la modification automatique des messages de validation de fusion, définissez cette variable d'environnement:

    GIT_MERGE_AUTOEDIT=no

Cette variable d'environnement et son paramètre "non" sont documentés sur la page doc de git merge . Il est recommandé de ne l'utiliser que dans les scripts qui doivent fusionner de manière non interactive, mais bien sûr, il peut être défini dans le cadre de votre environnement shell pour rendre ses effets plus permanents.

emackey
la source
Pouvez-vous expliquer en quoi cela peut être différent de l'utilisation du --no-editdrapeau?
Alexander Mills
2
Je ne connais pas de différence fonctionnelle, mais le facteur de commodité en vaut la peine. L' --no-editindicateur doit être répété sur la ligne de commande à chaque utilisation, car il ne semble pas fonctionner dans les paramètres décrits dans la réponse de Dallas Clark ici. Définir la variable d'environnement est le seul moyen que je connaisse pour que ce paramètre reste.
emackey