Запустите сообщение git commit с хешмарком (#)
Git обрабатывает строки, начинающиеся с #
в качестве комментария при фиксации. это очень раздражает, когда вы работаете с системой отслеживания билетов и пытаетесь написать номер билета в начале строки, например
#123 salt hashed passwords
git просто удалит строку из сообщения коммита. есть ли способ избежать хеша? Я старался \
а также !
, но ничего не работает. пробелы перед #
сохраняются, поэтому они не являются рабочим решением проблемы.
10 ответов
Это поведение является частью git commit
поведение по умолчанию для очистки. Если вы хотите сохранить строки, начинающиеся с #
Вы можете использовать альтернативный режим очистки.
Например
git commit --cleanup=whitespace
Если вы делаете это, вы должны быть осторожны, чтобы удалить все #
строки, которые вы не хотите появляться в коммите.
Обратите внимание, что начиная с git1.8.2 (февраль 2013 г.), вы можете использовать символ, отличный от '#
для закомментированной строки в сообщении фиксации.
Это позволяет вам использовать#
для вашей ссылки номер ошибки.
Различные строки "подсказки", которые Git дает, когда просит пользователя редактировать сообщения в редакторе, закомментированы с помощью '
#
' по умолчанию.
core.commentChar
переменная конфигурации может быть использована для настройки этого '#
'другому персонажу.
В теории вымогли бы поставить core.commentChar
word (несколько символов), но 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
:
Смотрите коммит 84c9dc2
когда
core.commentChar
является "auto
", комментарий char начинается с '#
'по умолчанию, но если оно уже есть в подготовленном сообщении, найдите другой символ в небольшом подмножестве. Это должно остановить сюрпризы, потому что git неожиданно удаляет некоторые строки.Обратите внимание, что Git не достаточно умен, чтобы распознать
#
'как символ комментария в пользовательских шаблонах и конвертируйте его, если последний символ комментария отличается.
Он считает строки "#" в пользовательских шаблонах частью сообщения фиксации. Так что не используйте это с пользовательскими шаблонами.
Список символов-кандидатов для "авто":
# ; @ ! $ % ^ & | :
Это означает, что команда, как git commit -m '#1 fixed issue'
автоматически переключит commentChar на ';
', так как '#
был использован в сообщении фиксации.
Ответы здесь хорошие и подробные, но для такого мерзавца, как я, настройка параметров конфигурации git не так очевидна. Вот пример для изменения #
в ;
для комментариев персонажей:
git config core.commentChar ";"
Это все, что вам нужно сделать.
Вы можете использовать опцию командной строки -m
:
git commit -m "#123 fixed"
Если вы выполняете интерактивную перебазировку, то когда вы сохраняете сообщение о коммите, в котором ничего нет #
в начале сделал комментарий, и поэтому он был проигнорирован) 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
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.
Достаточно начать сообщение фиксации с символа пробела
прямо перед
#
char.
потом
git
перестает рассматривать строку как комментарий и
github
может без проблем использовать хешированный номер билета.
vim
Подсветка синтаксиса по умолчанию даже предполагает эту функцию, изменяя цвет с комментария на довольный .
Используйте другой префикс для номера билета. Или добавьте слово к номеру билета, например "Ошибка № 42". Или добавьте один пробел к строке; если вы хотите удалить этот пробел, вы можете добавить коммит-хук для этого.
Лично я предпочел бы, чтобы манипуляция сообщениями коммита не выполнялась с помощью хука, потому что это может быть очень раздражающим, когда оно срабатывает, когда вы этого не хотите. Возможно, самое простое решение - переосмыслить проблему.
Все мои коммиты начинаются с #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
,
это расширение истории, поэтому оно не сработало.
Расширения истории представлены появлением символа расширения истории, который
!
по умолчанию.
Вы можете использовать с одинарными кавычками (Escape a Single Quote in Single Quote String в Bash ):
$ git commit -m $'#228 update to a new version! margin of error is 33% | 33^*0.22;'
# commit message: #228 update to a new version! margin of error is 33% | 33^*0.22;
$ git commit -m $'docs!: new API reference for GPS horse navigation'
# commit message: docs!: new API reference for GPS horse navigation
Если использовать без$
и'
но с :
$ git commit -m "docs!: new API reference for GPS horse navigation"
bash: : unrecognized history modifier
Если используется с"
и сбежать(\
все равно будет или я что-то не так делал):
$ git commit -m "docs\!: new API reference for GPS horse navigation"
# commit message: docs\!: new API reference for GPS horse navigation