Запустите сообщение git commit с хешмарком (#)

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

#123 salt hashed passwords

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

Ответ 1

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

например.

git commit --cleanup=whitespace

Если вы это сделаете, вы должны быть осторожны, чтобы удалить все строки #, которые вы не хотите отображать в фиксации.

Ответ 2

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

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

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

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


В теории вы можете поместить слово core.commentChar (несколько символов), но Git 2.0.x/2.1 будет более строгим (Q3 2014).

См. commit 50b54fd Nguyễn Thái Ngọc Duy (pclouds):

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

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

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


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

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

Обратите внимание, что Git недостаточно умен, чтобы распознать "#" в качестве комментария char в пользовательских шаблонах и преобразовать его, если последний комментарий char отличается.
Он думает '#' строки в пользовательских шаблонах как часть сообщения фиксации. Поэтому не используйте это с настраиваемыми шаблонами.

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

# ; @ ! $ % ^ & | :

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

Ответ 3

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

git commit -m "#123 fixed"

Ответ 4

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

git config core.commentChar ";"

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

Ответ 5

Если вы делаете интерактивную перезагрузку, тогда, когда вы сохраняете свое сообщение фиксации ничем в нем (потому что # в начале сделал его комментарием и поэтому он был проигнорирован) 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"

и продолжить rebase:

git rebase --continue

Ответ 6

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.

Ответ 7

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

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

Ответ 8

Все мои фиксации начинаются с #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.