2010-03-19 7 views
11

J'utilise git pour mon travail local (et j'aime tellement ça), et je suis un flux de travail similaire à celui décrit dans this article. Donc, fondamentalement, quand je commence une nouvelle fonctionnalité, je crée une branche pour elle, passe par le hack habituel puis le cycle de commit, et quand je pense que j'en ai fini, je l'écrase en un seul commit en utilisant git rebase --interactive master finir par éditer la multitude de commettre des messages dans quelque chose qui ressemble l'exemple dans l'article, reproduit ici:Comment personnaliser le format de git rebase - messages de validation interactifs?

[#3275] User Can Add A Comment To a Post 

* Adding Comment model, migrations, spec 
* Adding Comment controller, helper, spec 
* Adding Comment relationship with Post 
* Comment belongs to a User 
* Comment form on Post show page 

Bien sûr, c'est après un tas d'enlever # This is the xth commit message lignes et copier/coller * en face de chaque message de validation .

Maintenant, ce que je me demandais, est-il possible de personnaliser comment git rebase -i affiche les messages de validation écrasés afin que je n'ai pas à faire tout ce hacking?

(j'utilise msysgit, si cela importe. Mon éditeur est Notepad ++.)

Merci!

+1

Vous devriez envisager de changer la réponse acceptée, puisque git a ajouté un support pour cela maintenant. – Joakim

+0

@Joakim Comme nous le verrons plus loin, la fonction git 2.6 ne correspond pas exactement à l'OP, donc la réponse de Jefromi est valide. – VonC

Répondre

4

Il n'y a aucun moyen (court de piratage de la source) pour modifier le modèle de message de squash, je ne pense pas. Cependant, vous avez deux options:

  • Utilisez une commande git log pour obtenir la liste, quelque chose comme `log git --pretty = "*% s" engager-1..commit-2 pour vous aider vos balles. En linux, il est très possible de le faire depuis votre éditeur - ne savez pas comment cela fonctionne avec msysgit.

  • Demandez à votre éditeur faire le travail pour vous! Je ne sais pas ce que votre éditeur est, donc je ne peux pas vraiment vous dire quoi faire, mais ce serait certainement très possible dans vim. (L'idée étant: rechercher /# This is the .* commit message/, supprimer quelques lignes, garder un, supprimer jusqu'à commentaire suivant)

De plus, ce n'est pas ce que vous voulez dans ce cas, probablement, mais dans des versions assez récentes git, il y a un identifiant fixup que vous pouvez utiliser à la place du squash - il fait la même chose, mais il rejette le message de commit, donc si vous avez un commit avec le vrai message puis dix correctifs, vous pouvez simplement les marquer tous avoir à supprimer leurs messages jetables.

+0

Je suis d'accord. +1 Pour en savoir plus sur fixup (et autosquashing), voir http://stackoverflow.com/questions/2302736/trimming-git-checkins/2302947#2302947 – VonC

+0

Cool! Je vais devoir mettre à jour msysgit et donner ce correctif et un tel tir. :) Je – adamjford

+0

ai commencé à utiliser Vim pour mes manigances d'édition de texte, donc je suppose que je vais avec porte # 2! – adamjford

0

Vous pouvez fait un --amend quand vous voulez. Vous pouvez vérifier dans le commit précédent que vous vous engagez à changer et à le modifier.

+0

Eh oui, et j'utiliser --amend un peu parce que j'ai les doigts gras, apparemment. :) Mais je n'ai pas besoin - d'amender mes commits écrasés pour éditer le message de commit qui en résulte; Je le formate simplement dans l'éditeur de texte qui apparaît après que vous ayez assigné pick/edit/squash à chaque commit. J'ai clarifié ma question pour rendre compte de cela. – adamjford

9

À partir Git 2.6+ (Q3 2015), il y aura effectivement un moyen de configurer git rebase -i le message de validation.

Voir commit 16cf51c (13 juin 2015) par Michael Rappazzo (rappazzo).
(Fusionné par Junio C Hamano -- gitster -- en commit 9f56db7 03 août 2015)

git-rebase--interactive.sh: Ajout d'une option de configuration pour le format d'instruction personnalisé

Une option de configuration 'rebase.instructionFormat' peut remplacer le format par défaut 'oneline' du rebasez la liste d'instructions.

Comme la liste est analysée à l'aide de la gauche, marque droite ou limite plus le SHA1, ils sont préfixé au format d'instruction.

Vous allez bientôt avoir une nouvelle config:

rebase.instructionFormat 

Une chaîne de format, tel que spécifié dans git log, à utiliser pour la liste d'instructions au cours d'une rebasage interactive.
Le format sera automatiquement long hachage engagement préfixé au format.

Par exemple:

git config --add rebase.instructionFormat "[%an @ %ar] %s" 

Remarque il y a un bug/régression après la sortie de cette fonction:
Voir "Comment in rebase instruction has become too rigid"

je remarquai que le format des lignes de commentaires dans une feuille d'instructions de rebasage est devenue plus stricte - elle ne pouvait plus commencer par des espaces ou des tabulations. Le commentaire char ("#" par exemple) doit apparaître sur la première colonne.


Jefromi commentaires below:

il apparaît il est seulement censé affecter l'affichage à l'intérieur rebasage interactif, et non le résultat de commits. Je l'ai essayé avec votre exemple de chaîne de format et j'ai effectivement vu les informations de l'auteur dans mon éditeur, mais une fois que je l'ai dit au squash, le message de validation du modèle qui en résultait était toujours le message habituel.

Donc, ce n'est pas un ajustement parfait pour l'OP.

+0

Quelqu'un m'a dit que ma réponse était fausse maintenant, donc j'ai jeté un coup d'oeil à ceci - il semble que ce soit seulement pour affecter l'affichage dans le rebasage interactif, pas les messages de commit résultants. Je l'ai essayé avec votre exemple de chaîne de format et j'ai effectivement vu les informations de l'auteur dans mon éditeur, mais une fois que je l'ai dit au squash, le message de validation de modèle qui en résultait était toujours le message habituel. – Cascabel

+0

@Jefromi Bon point. J'ai inclus votre commentaire dans la réponse pour plus de visibilité. Et j'ai ajouté un commentaire à la question indiquant que votre réponse est toujours la bonne. – VonC