git: mostra la differenza di indice nel messaggio di commit come commento


109

Quando è git commitaperto, l'editor dei messaggi mostra un breve stato, qualcosa del genere:

# 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
#

Come posso modificare git per mostrare anche il diff da impegnare? Sono consapevole che potrebbe essere una differenza lunga, ma comunque .. così utile.


Cosa stai cercando di fare per cui hai bisogno delle modifiche elencate nel messaggio di commit? Potresti semplicemente avere un malinteso con uno strumento particolare e potremmo essere in grado di aiutarti a risolvere il problema reale.
Mark Rushakoff

1
questo ti fornisce alcune informazioni che non ottieni con "git log -p"?
Jed Schneider

12
@Mark: L'OP vuole che il diff sia commentato. È una versione più dettagliata del suggerimento commentato predefinito. @ Jed: L'OP vuole queste informazioni nel modello del messaggio di commit. Sì lo git diff --cachedproduce, ma perché eseguire un comando separato se lo desideri ogni volta?
Cascabel

1
github.com/tpope/vim-fugitive/issues/149 sta seguendo questo per fuggitivo, nel caso ve lo stiate chiedendo. Se non lo sei, dovresti esserlo.
lkraav

Risposte:


149

Il flag --verbose(o -v) per git commitmostrerà la differenza di ciò che sarebbe stato commesso:

git commit --verbose


3
sembra che il diff non sia commentato, qualche modo per renderlo un commento di default?
Idan K

25
I messaggi diff non hanno bisogno di essere commentati, Idan; git sa di ignorarli come se fossero commenti.
Brandon Rhodes

@BrandonRhodes Come dire a git bit di ignorare il diff? Ho uno script per generare poche righe di addizione in formato diff, ma è stato troncato dalla prima riga
Dennis C

2
@IdanK, un vantaggio per le linee diff che non vengono commentate nel modello del messaggio di commit è che la colorazione del codice vim funziona sul contenuto diff aggiunto (se hai le aggiunte del tipo di file git installate per vim). Se queste linee diff fossero commentate, questa colorazione non funzionerebbe.
Christopher

1
Ignora il mio commento precedente; il colpevole è stato il plugin EditorConflig che scherzava con la riga "Non toccare la riga sopra".
Daniel Liuzzi

31

Non abbastanza reputazione per pubblicare una risposta alla risposta di Alan, ma per Idan e chiunque altro l'ho appena provato e le linee diff nel messaggio di commit non sono esplicitamente commentate. Tuttavia, grazie al cielo non vengono ancora visualizzati nel messaggio di commit finale.

$ git commit --verbose

Nel mio editor:

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!

(nota la mancanza di #precedere le linee diff)

E poi il messaggio di commit effettivo:

$ 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.

Ovviamente, git showmostrerà ancora il diff, ma è perché lo fa sempre per i commit. :)


2
Nelle nuove versioni di git (ho la 2.3) il diff è preceduto dalla seguente riga: # ------------------------ >8 ------------------------- presumo che git rimuova automaticamente tutto ciò che appare dopo di esso.
Jan Warchoł

Almeno dalla 2.4.1, vedo: # ------------------------> 8 ------------ ------------ # Non toccare la riga sopra. # Tutto ciò che segue verrà rimosso. quindi questo conferma quello che stavi pensando.
Anthony Panozzo

@AnthonyPanozzo Questo sembra essere rotto su 2.5.3. Nonostante il marcatore "Non toccare la riga sopra", il diff completo finisce comunque nel messaggio di commit.
Daniel Liuzzi

Lavora per me in 2.8.2
Anthony Panozzo

3
Per impostarlo dalla riga di comando:git config --global commit.verbose true
Taylor Edmiston

10

Il modo più semplice per assicurarti che questo comportamento sia sempre presente è aggiungere questa sezione al tuo git configfile:

[commit]
  verbose = true

Potrebbe essere necessario configurare l'editor per visualizzare effettivamente in modalità diff (per l'evidenziazione della sintassi). Uso Notepad2 come sostituto del Blocco note di Windows e -s diffimposto la combinazione di colori in modo appropriato (rosso per le linee eliminate, ecc.):

[core]
  editor = C:/Windows/system32/notepad.exe -s diff

9

Ho inserito le seguenti righe in .git / hooks / prepare-commit-msg per ottenere un diff commentato:

#!/bin/bash

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

In questo modo non solo puoi commentare il diff, ma anche aggiungere ulteriori informazioni (come fa l' opzione stat ).

Modifica: anche git commit --verbose non include il diff nel messaggio di commit in questo modo farebbe a meno dei #s.


4
Invece di commentare che puoi usare # ------------------------ >8 ------------------------puoi trovare più git-scm.com/docs/git-commit#git-commit-scissors
AB

8

Se vuoi vedere sempre il diff quando effettui il commit, puoi aggiungere quanto segue al tuo ~/.gitconfigfile:

[alias]
commit = commit -v

Puoi, però, che versione di git usi? Questo funziona per me con la versione 2.0.0
arrugginito

2
La tua risposta sembra promettente ma non funziona neanche per me. Ho provato git config --global alias.commit 'commit -v'e l'alias è stato aggiunto come mi hai suggerito, in modo automatico. Ho creato un altro alias denominato cvche funziona come previsto. La mia versione di git è 2.5.0 come pacchettizzata in Ubuntu 15.10.
Daniel Böhmer

6
Per impostarlo dalla riga di comando:git config --global commit.verbose true
Taylor Edmiston
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.