82 votes

Comment puis-je personnaliser le message de validation de la fusion de git?

Chaque fois que je fais une fusion j'ai besoin pour une fusion, s'engager à être généré et j'aimerais avoir plus que juste le résumé de tous les changements.

Ma question est comment puis-je format git-fmt-fusion-msg ou ce qui détermine ce message automatisé (je peux le faire manuellement après une validation par la modification et l'utilisation de git log --pretty=format:'...')

Pour exemple, j'aimerais format en tant que tel:

Fusion de la branche "test"
* test:
[BZ: #123] cinquième commettre l'objet
[BZ: #123] quatrième commettre l'objet
[BZ: #123] troisième commettre l'objet
[BZ: #123] deuxième commettre l'objet
[BZ: #123] d'abord de valider l'objet


Fusionner les détails:
[BZ: #123] cinquième commettre l'objet
au 2010-06-30 11:29:00 +0100
- cinquième commettre corps

[BZ: #123] quatrième commettre l'objet
au 2010-06-30 11:22:17 +0100
- quatrième commettre corps

[BZ: #123] troisième commettre l'objet
au 2010-06-30 11:21:43 +0100
- troisième s'engager corps

[BZ: #123] deuxième commettre l'objet
au 2010-06-30 11:21:30 +0100
- deuxième commettre corps

[BZ: #123] d'abord de valider l'objet
au 2010-06-30 11:29:57 +0100
- d'abord de valider les corps

edit:

pour les non-correctif idéal voir réponse ci-dessous

mais la vraie question est de savoir comment modifier les informations générées par le "fmt-fusion-msg'?

56voto

laszlok Points 432

Je suis conscient que cela ne répond pas à la question initiale, mais pour le bénéfice des git noobs qui, comme moi, accèdent à cette page, car il s'agit actuellement du premier résultat de Google pour "git change merge commit message", je mentionnerai qu'il est possible à:

 git commit --amend -m"New commit message"
 

pour modifier le message de validation d'un commit de fusion sans perdre le lien avec l'un des parents du commit de fusion.

24voto

R0MANARMY Points 8440

Ressemble à de la version Git 1.7.8 vous pouvez le faire git merge --edit ... pour spécifier le message de commit.

Et comme de 1.7.10, de les faire tomber dans le mode edit, vous être le comportement par défaut

À partir de cette version, le "git merge" de commande dans une session interactive lancera l'éditeur lorsqu'il résout automatiquement la fusion de l'utilisateur pour expliquer la résultante de s'engager, tout comme le "git commit" commande ne quand il n'a pas reçu un message de commit.

(même si je ne suis pas le voir dans msysgit sur windows).

18voto

shil88 Points 491

J'ai trouvé il y a deux façons de résoudre ce problème

remarque: ne pas utiliser les deux en même temps, comme si la validation échoue à fusionner, il va ajouter de nouveau le journal vers le bas.

note personnelle: je suis en utilisant la première solution, puisqu'il repose entièrement sur le git de crochets et de propriétés de configuration, au lieu d'un script externe.
Pour une vraie solution aurait pour étendre une commande git nommé "fmt-fusion-msg" qui génère le oneline descriptions en passant l'option --log option (si vous en avez vraiment besoin de cette solution, vous devrez créer votre propre patch (git) et le compiler à partir des sources).

1. à l'aide de préparer et commettre des message comme VonC suggéré
cette solution a le problème que vous avez besoin d'interrompre la livraison et ensuite valider manuellement

définition d'un alias qui va construire le souhaité s'engager message:

[alias]  
lm = log --pretty=format:'%s%n   by %C(yellow)%an%Creset (%ad)%n %n%b' --date=local

la création de la préparer-commit-msg crochet par la création d'un exécutable préparez-commit-msg dans $GIT_DIR/hooks/ (exemple de script ci-dessous)

#!/bin/sh
#...

case "$2,$3" in  
  merge,)  
  echo "Merge details:" >> $1  
  echo "" >> $1  
  git lm ORIG_HEAD..MERGE_HEAD >> "$1" ;;  
*) ;;  
esac  

on devrait définir un alias de commettre des msg comme

[alias]  
m = merge --no-ff --no-commit

2. à l'aide d'une commande personnalisée qui va générer les fusionner automatiquement
(à l'aide de la lm alias créé en 1.)

#!/bin/sh

echo ""
echo "merge with commit details -- HEAD..$1"
git merge --no-ff --no-log -m "`git lm HEAD..$1`" --no-commit $1

et puis d'exécuter un peu rigide de commande:

./cmd-name <branch to merge>

si vous voulez toujours avoir le oneline description de tous les commits que vous aurez besoin pour ajouter de nouvelles commandes ou que ce soit à l'argument-m (si vous utilisez --log alors il sera généré sur le fond)

10voto

przbadu Points 749

Une fois que vous fusionnez votre <branch A> de <branch B>, git va automatiquement commettre un message disant: "fusion de la branche <branch A> en <branch B>.

Si vous souhaitez personnaliser git fusionner de message de commit, vous pouvez essayer:

$ git commit --amend -m "Your merge message"

Cette commande permet de mettre à jour votre git de fusionner le message de validation de votre message de commit.

vous pouvez aussi essayer :

$ git merge <branch A> --no-commit

elle va fusionner votre <branch B> avec <branch A>, avec la liste d' <Branch B>'s s'engager et d'engager des messages

Si elle ne parvient pas à faire d'avance rapide, vous obtiendrez quelque chose comme ceci:

Automatic merge went well; stopped before committing as requested

# check this with git status 
$ git status

Il va vous montrer, vos commits sont déjà ajoutés à la scène, mais pas encore engagé de la sorte, on ne peut s'engager sans se git add:

$ git commit -m "your merge commit message"

Si vous souhaitez modifier <branch B>dernier message de validation puis à nouveau, vous pouvez essayer:

$ git commit --amend -m "your new commit message"

Mais, en général, nous n'avons pas de mettre à jour d'autres messages de validation, sauf si elles sont incorrectes.

Supposons que, vous obtenez le conflit après le git merge, puis il suffit de résoudre le conflit et à faire:

$ git add .
$ git commit -m "your commit message"

5voto

VonC Points 414372

Vous pouvez essayer de définir un hook prepare-commit-msg (l' exemple ci- dessus génère des "messages de validation par défaut" personnalisés).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X