Запустите сообщение git commit с хешмарком (#) - PullRequest
245 голосов
/ 07 мая 2010

Git обрабатывает строки, начинающиеся с #, как строки комментариев при фиксации.это очень раздражает, когда вы работаете с системой отслеживания заявок и пытаетесь записать номер заявки в начале строки, например,

#123 salt hashed passwords

git просто удалит строку из сообщения о фиксации.есть ли способ избежать хеша?я пробовал \ и !, но ничего не работает.пробелы до # сохраняются, поэтому они также не являются рабочим решением проблемы.

Ответы [ 8 ]

203 голосов
/ 07 мая 2010

Это поведение является частью git commit стандартного поведения очистки. Если вы хотите, чтобы строки начинались с #, вы можете использовать альтернативный режим очистки.

* 1005 Е.Г. *

git commit --cleanup=whitespace

Если вы сделаете это, вы должны быть осторожны, чтобы удалить все # строки, которые не должны появляться в коммите.

118 голосов
/ 18 февраля 2013

Обратите внимание, что, начиная с git1.8.2 (февраль 2013 г.) , вы можете использовать символ, отличный от '#' для строки комментария в сообщении о фиксации.

Это позволяет вам использовать '#' для ссылки на номер ошибки.

Различные строки «подсказок», которые Git дает, когда он просит пользователя отредактировать сообщения в редакторе, по умолчанию закомментированы с #.

Переменная конфигурации core.commentChar может использоваться для настройки этого '#' на другой символ.


Теоретически, вы могли бы вставить слово core.commentChar (несколько символов), но git 2.0.x / 2.1 будет более строгим (3 квартал 2014 года).

См. коммит 50b54fd от Нгуен Тхай Нгёк Дуй (pclouds) :

config: быть строгим на core.commentChar

Мы не поддерживаем комментарий строки (по крайней мере, пока). И многобайтовая кодировка символов также может быть неверно истолкована.

Тест с двумя запятыми обновлен, потому что он нарушает это. Он добавлен с патчем, который вводит core.commentChar в eff80a9 (Разрешить пользовательский "комментарий char" - 2013-01-16). Мне не понятно почему такое поведение желательно.


git 2.0.x / 2.1 (3 квартал 2014 г.) добавит автоматический выбор для core.commentChar:
См. commit 84c9dc2

Когда core.commentChar равен "auto", символ комментария начинается с '#', как по умолчанию, но если он уже находится в подготовленном сообщении, найдите другой символ в небольшом подмножестве. Это должно остановить сюрпризы, потому что git неожиданно удаляет некоторые строки.

Обратите внимание, что git недостаточно умен, чтобы распознавать '#' как символ комментария в пользовательских шаблонах и преобразовывать его, если последний символ комментария отличается.
Он считает строки # в пользовательских шаблонах частью сообщения о коммите. Так что не используйте это с пользовательскими шаблонами.

Список символов-кандидатов для "auto":

# ; @ ! $ % ^ & | :

Это означает, что команда, подобная git commit -m '#1 fixed issue', автоматически переключит commentChar на ';', поскольку в сообщении о фиксации было использовано #.

69 голосов
/ 29 мая 2015

Ответы здесь хорошие и подробные, но для такого мерзавца, как я, настройка параметров git config не так очевидна.Вот пример для изменения с # на ; для символов комментария:

git config core.commentChar ";"

Это все, что вам нужно сделать.

60 голосов
/ 07 мая 2010

Вы можете использовать параметр командной строки -m:

git commit -m "#123 fixed"
30 голосов
/ 28 января 2016

Если вы выполняете интерактивную перебазировку, то когда вы сохраняете свое сообщение о коммите, в котором ничего нет (потому что # в начале сделало это комментарием, и поэтому оно было проигнорировано), git покажет вам, что делать :

Aborting commit due to empty commit message.
Could not amend commit after successfully picking 5e9159d9ce3a5c3c87a4fb7932fda4e53c7891db... 123 salt hashed passwords
This is most likely due to an empty commit message, or the pre-commit hook
failed. If the pre-commit hook failed, you may need to resolve the issue before
you are able to reword the commit.
You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

Итак, просто измените сообщение:

git commit --amend -m "#123 salt hashed passwords"

и продолжить ребаз:

git rebase --continue
22 голосов
/ 05 мая 2016

git commit --cleanup=scissors следует использовать. Добавлено в Git v2.0.0 2014.05.21

от git commit --help

--cleanup=<mode>
  scissors
    Same as whitespace, except that everything from (and including) the line
    "# ------------------------ >8 ------------------------" is truncated if the message
    is to be edited. "#" can be customized with core.commentChar.
3 голосов
/ 07 мая 2010

Используйте другой префикс для номера билета. Или добавьте слово к номеру билета, например «Ошибка № 42». Или добавьте один пробел к строке; если вы хотите удалить этот пробел, вы можете добавить коммит-хук для этого.

Лично я бы предпочел, чтобы подобные манипуляции с сообщениями о коммитах не выполнялись с помощью ловушки, потому что это может быть очень раздражающим, когда срабатывает, когда вы этого не хотите. Возможно, самое простое решение - переосмыслить проблему.

1 голос
/ 06 сентября 2016

Все мои коммиты начинаются с #issueNumber, поэтому я положил этот шаблон к своему vim .git/hooks/commit-msg:

NAME=$(git branch | grep '*' | sed 's/* //') 
echo "$NAME"' '$(cat "$1") > "$1"

Итак, давайте предположим, что у нас есть ветвь #15, и мы делаем сообщение коммита add new awesome feature. При таком подходе сообщение окончательной фиксации будет #15 add new awesome feature.

...