git: Показати покажчик розрізнення у тексті повідомлення як коментар


109

Після 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, щоб показати також різницю, яку слід здійснити? Я знаю, що це може бути довгим різницею, але все ж .. так корисно.


Що ви намагаєтеся зробити, щоб вам потрібні зміни, перелічені в повідомленні про здійснення? Ви можете просто нерозуміти певний інструмент, і ми можемо допомогти вам вирішити справжню проблему.
Марк Рушакофф

1
це надає вам якусь інформацію, яку ви не отримуєте з 'git log -p'?
Джед Шнайдер

12
@ Марк: ОП хоче, щоб прокоментували різні. Це більш докладна версія версії натяку на коментарі за замовчуванням. @Jed: ОП хоче цю інформацію у шаблоні повідомлення про фіксацію. Так, git diff --cachedце виробляє, але навіщо запускати окрему команду, якщо її потрібно кожного разу?
Каскабель

1
github.com/tpope/vim-fugitive/isissue/149 слідкує за цим втікачем, якщо вам цікаво. Якщо ви цього не зробите.
lkraav

Відповіді:


149

Прапор --verbose(або -v) git commitвідображатиме різницю того, що буде вчинено:

git commit --verbose


3
здається, що diff не коментується, будь-який спосіб зробити його коментарем за замовчуванням?
Ідан К

25
Із різними повідомленнями не потрібно коментувати, Ідан; git знає ігнорувати їх так, ніби це коментарі.
Брендон Родос

@BrandonRhodes Як сказати, що git bit ігнорує різницю? У мене є сценарій для створення декількох рядків додавання у різному форматі, але він урізаний з першого рядка
Dennis C

2
@IdanK, користь для розрізних рядків, які не коментуються в шаблоні повідомлення фіксації, полягає в тому, що забарвлення коду vim працює над доданим вмістом diff (якщо для vim встановлені типи файлів git). Якби ці різні лінії були прокоментовані, це забарвлення не буде працювати.
Крістофер

1
Нехтувати моїм попереднім коментарем; винуватцем плагіну EditorConflig возився з рядком "Не торкайся лінії вище".
Даніель Люцці

31

Недостатньо репутації, щоб опублікувати відповідь на відповідь Алана, але для Ідана та будь-кого іншого я просто спробував це, і різні рядки у повідомленні про комісію явно не коментуються. Однак вони все ще не відображаються в останньому повідомленні про виконання зобов'язань, дякуйте за добро.

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

(зауважте, відсутність #попередніх ліній різниці)

А потім фактичне повідомлення про фіксацію:

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

Очевидно, що git showвсе-таки буде показано різницю, але це тому, що це завжди робиться за коміти. :)


2
У нових версіях git (у мене 2.3) diff є префіксом наступного рядка: # ------------------------ >8 ------------------------- Я припускаю, що git автоматично видаляє все, що з’являється після нього.
Jan Warchoł

Щонайменше 2.4.1, я бачу: # ------------------------> 8 ------------ ------------ # Не торкайтеся рядка вище. # Усе нижче буде видалено. тож це підтверджує те, що ви думали.
Ентоні Паноццо

@AnthonyPanozzo Це, здається, зламано на 2.5.3. Незважаючи на маркер "Не торкайтеся рядка вище", повний розряд все одно закінчується у повідомленні про фіксацію.
Даніель Люцці

Для мене працює в 2.8.2
Ентоні Паноццо

3
Щоб встановити це з командного рядка:git config --global commit.verbose true
Тейлор Едмістон

10

Найпростіший спосіб переконатися, що така поведінка завжди присутня - це додати цей розділ у свій git configфайл:

[commit]
  verbose = true

Можливо, вам знадобиться налаштувати редактор, щоб він фактично відображався в режимі розмін (для виділення синтаксису). Я використовую Notepad2 в якості заміни Блокнота Windows і -s diffвстановлюю відповідну кольорову схему (червона для видалених рядків тощо):

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

9

Я розмістив наступні рядки в .git / hooks / priprema-фіксація-msg, щоб отримати коментований розріз:

#!/bin/bash

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

Таким чином, ви можете не лише прокоментувати різницю, але й додати більше інформації (як це робить параметр stat ).

Редагувати: також git commit --verbose не включає розріз у повідомлення, яке виконує цей спосіб без #s.


4
Замість коментарів ви можете використовувати # ------------------------ >8 ------------------------ви можете знайти більше git-scm.com/docs/git-commit#git-commit-scissors
AB

8

Якщо ви хочете завжди бачити відмінності під час виконання зобов’язань, ви можете додати у свій ~/.gitconfigфайл таке:

[alias]
commit = commit -v

Ти можеш, однак, - на якій версії git ти працюєш? Це працює для мене з версією 2.0.0
іржавий

2
Ваша відповідь виглядає багатообіцяючою, але не працює і для мене. Я спробував, git config --global alias.commit 'commit -v'і псевдонім додався так, як ви запропонували - просто автоматично. Я створив ще один псевдонім з назвою, cvякий працює як очікувалося. Моя версія git - це версія 2.5.0, упакована в Ubuntu 15.10.
Даніель Бьомер

6
Щоб встановити це з командного рядка:git config --global commit.verbose true
Тейлор Едмістон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.