Après avoir effectué une fusion et résolu les conflits, existe-t-il un moyen “simple” d’accepter le message de validation généré par défaut à partir de la ligne de commande? Un de nos développeurs résoudra tous les conflits, puis procédera à un git commit -m"Merge Commit"
qui remplacera le message de validation généré qui répertoriera tous les fichiers de conflit. Je voudrais avoir un drapeau différent qui prendrait simplement le fichier actuel sans modification. Je sais qu’il y a une option -F ou –file =, mais cela nécessite de connaître le nom du fichier tout le temps.
Je vous remercie
De toute évidence, la “bonne” réponse consiste à amener votre développeur à suivre les pratiques correctes pour votre équipe lors de la génération de validations de fusion. Notez que le comportement que vous voulez utiliser était le comportement par défaut, et ce n’est que récemment que git a commencé à exiger des messages de validation “générés par l’homme” pour les fusions. C’était pour une raison, et ce n’était pas pour que les développeurs court-circuitent le processus avec un message dénué de sens.
Peut-être le développeur génère-t-il des commits de fusion quand il / elle devrait plutôt se rebaser à la place?
Cela dit, la validation de fusion est la sortie de git fmt-merge-msg
, à laquelle vous devez alimenter les parents de la validation de fusion.
Par les documents , je viens d’essayer cette commande simple et cela a fonctionné pour moi:
git commit --no-edit
Ensuite, lancez git log
pour confirmer que le message par défaut a été utilisé.
Par défaut, lorsqu’une fusion échoue, le message de validation devant être utilisé est enregistré dans un fichier du dossier git, généralement .git/MERGE_MSG
. Une fois les conflits résolus, l’exécution de git commit
transmettra ce message enregistré à l’éditeur par défaut.
Si le message n’est pas capté par lui-même, il peut être envoyé à la commande git à l’aide de l’option --file
, qui lit le message de validation d’un fichier:
git commit --file .git/MERGE_MSG
Il suffit de définir l’éditeur sur une commande qui ne fait rien:
GIT_EDITOR=true git commit
git commit --file .git/MERGE_MSG
comme déjà mentionné est git commit --file .git/MERGE_MSG
mais il ignore quelques points:
.git
mais un fichier .git
. Et éventuellement:
MERGE_MSG
contient des informations sur les fichiers en conflit. Les deux premiers points peuvent être utilisés avec git rev-parse
:
git commit -F "$(git rev-parse --git-dir)/MERGE_MSG"
Ou, alternativement, avec un alias Git:
commit-merge = !cat $(git rev-parse --git-dir)/MERGE_MSG | git commit -F -
Cela fonctionne à la fois dans les référentiels “normaux” et les sous-modules. Si les marqueurs de conflit marqués d’un #
doivent être ignorés, pour plus de simplicité, seule la première ligne du message de fusion peut être prise:
git commit -m $(head -1 $(git rev-parse --git-dir)/MERGE_MSG)
Ou un autre alias:
commit-merge = !head -1 $(git rev-parse --git-dir)/MERGE_MSG | git commit -F -
Je devais utiliser la touche -F
dans les alias car je ne pouvais pas faire émettre des citations de Git dans les commandes générées avec bash (sinon git commit
se plaindrait des commits partiels lors des fusions).
Git 2.12.0, qui a été publié il y a deux jours, introduit git merge --continue
à faire une validation de fusion qui a été arrêtée lors de conflits lors de la fusion. Cela fonctionne bien pour les sous-modules également, mais n’accepte pas encore --no-edit
, donc un éditeur est suggéré de changer le message de validation avant de conclure la fusion.
Si vous voulez vraiment appliquer cette règle, alors il pourrait y avoir un moyen de forcer cela en utilisant des crochets git.
Chaque fois qu’il y a un conflit de fusion, un «diff combiné» vous indiquera quels fichiers étaient en conflit: git diff HEAD HEAD^1 HEAD^2 --name-only
. Je ne sais pas si, techniquement, un diff combiné peut afficher plus de fichiers que ceux qui sont en conflit.
Mais, en supposant que cela fonctionne comme nous le souhaitons (ce qui est une hypothèse), alors vous pouvez avoir un hook git commit-msg
qui vérifie le message que l’utilisateur a tapé et affirme
Si ces conditions échouent, faites en sorte que le script imprime une explication de ce qui ne va pas, puis renvoyez une valeur différente de zéro pour annuler la validation. Vous pouvez faire en sorte que les développeurs installent ce hook de validation, ou vous pouvez également l’installer sur le serveur pour le faire respecter à coup sûr.