Git: Показать индекс diff в сообщении фиксации как комментарий

Когда git commit откройте редактор сообщений, отображается краткий статус, примерно такой:

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

Как я могу настроить git, чтобы показать также, какой diff должен быть зафиксирован? Я знаю, что это может быть длинный diff, но все же... настолько полезный.

Ответ 1

Флаг --verbose (или -v) для git commit отобразит разницу в том, что было бы выполнено:

git commit --verbose

Ответ 2

Недостаточно репутации, чтобы ответить на ответ Алана, но для Идана и кого-либо еще я просто попробовал это, а строки diff в сообщении commit явно не закомментированы. Тем не менее, они по-прежнему не отображаются в последнем сообщении о фиксации, слава богу.

$ git commit --verbose

В моем редакторе:

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!

(обратите внимание на отсутствие # перед линиями разностей)

И затем фактическое сообщение commit:

$ git log -n 1
commit ad21a2655ef6d8173c2df08dc9893055b26bc068
Author: Tom Jakubowski <[email protected]>
Date:   Thu Oct 27 19:12:54 2011 -0700

    Feeling a bit pessimistic now.

Очевидно, что git show все равно покажет diff, но это потому, что он всегда делает для коммитов.:)

Ответ 3

Я добавил следующие строки в .git/hooks/prepare-commit-msg, чтобы получить прокомментированный diff:

#!/bin/bash

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

Таким образом вы можете не только прокомментировать diff, но и добавить дополнительную информацию (например, параметр stat).

Изменить: Кроме того, git commit --verbose не включает diff в сообщение commit таким образом, обойдется без #s.

Ответ 4

Если вы хотите всегда видеть diff при фиксации, вы можете добавить в свой файл ~/.gitconfig следующее:

[alias]
commit = commit -v

Ответ 5

Самый простой способ убедиться, что это поведение всегда присутствует, - это добавить этот раздел в ваш файл git config:

[commit]
  verbose = true

Вам может потребоваться настроить ваш редактор для фактического отображения в режиме diff (для подсветки синтаксиса). Я использую Notepad2 в качестве замены Windows Notepad, а -s diff правильно устанавливает цветовую схему (красный для удаленных строк и т.д.):

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