Начать фиксации git сообщение с символа (#)

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

#123 salt hashed passwords

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

8 ответов


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

Э. Г.

git commit --cleanup=whitespace

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


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

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

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

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


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

посмотреть совершить 50b54fd by Nguyễn Thái Ng Duc Duy (pclouds):

config: будьте строги к ядру.commentChar

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

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


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

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

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

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

# ; @ ! $ % ^ & | :

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


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

git commit -m "#123 fixed"

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

git config core.commentChar ";"

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


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

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

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


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

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

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