Git: afficher le diff de l'index dans le message de validation en tant que commentaire

Lorsque git commit ouvre, l'éditeur de messages affiche un État bref, quelque chose comme ceci:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Your branch is ahead of 'origin/master' by 26 commits.
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   Showcase/src/com/gigantt/BorderArea.mxml
#   modified:   Showcase/src/com/gigantt/Client.mxml
#   modified:   Showcase/src/com/gigantt/GraphItem.mxml
#

Comment puis-je modifier git pour montrer aussi le diff à commettre? Je suis conscient que ce peut être un long diff, mais quand même.. donc utiles.

94
git
demandé sur Assaf Lavie 2011-01-20 20:00:43

5 réponses

L'indicateur --verbose (ou -v) pour git commit affichera le diff de ce qui serait commis:

git commit --verbose

133
répondu Alan Haggai Alavi 2016-09-14 09:15:56

Pas assez de réputation pour poster une réponse à la réponse D'Alan, mais pour Idan et n'importe qui d'autre, je l'ai juste essayé et les lignes de diff dans le message de validation ne sont pas explicitement commentées. Cependant, ils n'apparaissent toujours pas dans le message de validation final, Dieu merci.

$ git commit --verbose

Dans mon éditeur:

Feeling a bit pessimistic now.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   README
#
diff --git a/README b/README
index af5626b..c62237e 100644
--- a/README
+++ b/README
@@ -1 +1 @@
-Hello, world!
+Goodbye, world!

(notez l'absence de # précédant la diff lignes)

Puis le message de validation réel:

$ git log -n 1
commit ad21a2655ef6d8173c2df08dc9893055b26bc068
Author: Tom Jakubowski <tom@crystae.net>
Date:   Thu Oct 27 19:12:54 2011 -0700

    Feeling a bit pessimistic now.

Évidemment, {[4] } montrera toujours le diff, mais c'est parce qu'il le fait toujours pour les commits. :)

28
répondu tomjakubowski 2011-10-28 02:18:39

J'ai mis les lignes suivantes dans .git / hooks / prepare-commit-msg pour obtenir un diff commenté:

#!/bin/bash

if [ "$2" == "" ] ; then
    git diff --staged -p --stat 2> /dev/null | awk '{ printf "#"; print}' >> "$1"  2>/dev/null
fi

De cette façon, vous pouvez non seulement commenter le diff, mais aussi ajouter plus d'informations (comme le fait l'option stat).

Modifier: Aussi git commit --verbose n'inclut pas le diff au message de validation de cette façon ferait sans les #S.

9
répondu Michael 2011-03-06 13:38:09

Si vous voulez toujours voir le diff lorsque vous validez, vous pouvez ajouter ce qui suit à votre fichier ~/.gitconfig:

[alias]
commit = commit -v
7
répondu rusty 2015-10-28 01:51:39

Le moyen le plus simple de s'assurer que ce comportement est toujours présent est d'ajouter cette section à votre fichier git config:

[commit]
  verbose = true

Vous devrez peut-être configurer votre éditeur pour qu'il s'affiche réellement en mode diff (pour la coloration syntaxique). J'utilise Notepad2 comme remplacement du Bloc-Notes Windows, et -s diff définit le schéma de couleurs de manière appropriée (rouge pour les lignes supprimées,etc.):

[core]
  editor = C:/Windows/system32/notepad.exe -s diff
4
répondu Ryan Lundy 2017-09-11 16:56:41