Inicie uma mensagem de commit do git com um hashmark (#)

O Git trata as linhas que começam com # como linhas de comentários ao fazer o commit. isso é muito chato quando se trabalha com um sistema de rastreamento de tickets, e tentando gravar o número do ticket no início da linha, por exemplo

 #123 salt hashed passwords 

git irá simplesmente remover a linha da mensagem de commit. Existe alguma maneira de escaping do hash? eu tentei e ! , mas nada funciona. espaços em branco antes de # são preservados, portanto eles também não são uma solução de trabalho para o problema.

Esse comportamento faz parte do comportamento padrão de “limpeza” do git commit . Se você quiser manter as linhas começando com # você pode usar um modo alternativo de limpeza.

Por exemplo

 git commit --cleanup=whitespace 

Se você fizer isso, você deve ter cuidado para remover todas as # linhas que você não deseja que apareçam no commit.

Observe que, desde git1.8.2 (fevereiro de 2013) , você pode usar um caractere diferente de ‘ # ‘ para a linha comentada na mensagem de confirmação.

Isso permite que você use ‘ # ‘ para a referência do seu número de bug.

Várias linhas de “dica” que o Git dá quando pede ao usuário para editar mensagens no editor são comentadas com ‘ # ‘ por padrão.

A variável de configuração core.commentChar pode ser usada para personalizar este ‘ # ‘ para um caractere diferente.


Em teoria, você poderia colocar uma palavra core.commentChar (múltiplos caracteres), mas o git 2.0.x / 2.1 será mais estrito (Q3 2014).

Veja commit 50b54fd por Nguyễn Thái Ngọc Duy ( pclouds ) :

config: seja rigoroso em core.commentChar

Nós não suportamos cadeias de comentários (pelo menos não ainda). E a codificação de caracteres multibyte também pode ser mal interpretada.

O teste com duas vírgulas é atualizado porque viola isso. É adicionado com o patch que introduz o core.commentChar no eff80a9 (Permitir custom “comment char” – 2013-01-16). Não está claro para mim por que esse comportamento é desejado.


git 2.0.x / 2.1 (Q3 2014) adicionará uma seleção automática para core.commentChar :
Veja commit 84c9dc2

Quando o core.commentChar é ” auto “, o caractere de comentário começa com ‘ # ‘ como padrão, mas se já estiver na mensagem preparada, encontre outro caractere em um subconjunto pequeno. Isso deve impedir surpresas porque o git remove algumas linhas inesperadamente.

Observe que o git não é inteligente o suficiente para reconhecer ‘ # ‘ como o caractere de comentário em modelos personalizados e convertê-lo se o caractere de comentário final for diferente.
Ele acha ‘#’ linhas em modelos personalizados como parte da mensagem de confirmação. Portanto, não use isso com modelos personalizados.

A lista de caracteres candidatos para “auto” é:

 # ; @ ! $ % ^ & | : 

Isso significa que um comando como git commit -m '#1 fixed issue' mudará automaticamente o commentChar para ‘ ; ‘, porque’ # ‘foi usado na mensagem de commit.

Você pode usar a opção de linha de comando -m :

 git commit -m "#123 fixed" 

As respostas aqui são boas e detalhadas, mas para um git noob como eu personalizar as opções de configuração do git não é tão óbvio. Aqui está um exemplo para mudar de # para ; para caracteres de comentário:

 git config core.commentChar ";" 

Isso é tudo que você precisa fazer.

Se você está fazendo um rebase interativo, então quando você salvar sua mensagem de commit com nada nela (porque o # no começo fez um comentário e, portanto, ele foi ignorado) o git mostrará o que fazer:

 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 

Então, apenas altere a mensagem:

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

e continue o rebase:

 git rebase --continue 

git commit --cleanup=scissors deve ser usado. É adicionado ao Git v2.0.0 em 2014.05.21

de git commit --help

 --cleanup= 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. 

Use um prefixo diferente para o número do ticket. Ou adicione uma palavra ao número do ticket, como “Bug # 42”. Ou prefixar um caractere de espaço único na linha; Se você deseja remover esse espaço em branco, você pode adicionar um commit-hook para isso.

Eu, pessoalmente, preferiria não ter esse tipo de manipulação de mensagens de commits feitas por um gancho, porque pode ser muito irritante quando isso é desencadeado quando você não quer. A solução mais fácil é provavelmente repensar o problema.

Todos os meus commits começam com #issueNumber então eu coloquei este boilerplate no meu vim .git/hooks/commit-msg :

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

Então vamos supor que temos o branch #15 e nós fazemos com que o commit da mensagem add new awesome feature . Com esta abordagem, a mensagem de commit final será #15 add new awesome feature .