O Git trata as linhas que começam com #
linhas de comentário ao confirmar. isso é muito irritante ao trabalhar com um sistema de rastreamento de tickets e ao tentar escrever o número do ticket no início da linha, por exemplo,
#123 salt hashed passwords
O git simplesmente removerá a linha da mensagem de confirmação. existe alguma maneira de escapar do hash? Eu tentei \
e !
, mas nada funciona. espaços em branco antes #
são preservados, portanto também não são uma solução funcional para o problema.
git
commit
ticket-system
ticket-tracking
knittl
fonte
fonte
git config core.commentchar
permite configurar esse caractere de comentário. Veja minha resposta abaixogit commit --cleanup=scissors
será mais flexível. Veja detalhes na minha respostaRespostas:
Esse comportamento faz parte do comportamento
git commit
padrão de 'limpeza'. Se você deseja manter as linhas iniciadas,#
pode usar um modo de limpeza alternativo.Por exemplo
Se você fizer isso, precisará tomar cuidado para remover todas as
#
linhas que não deseja que apareçam no commit.fonte
commit.template
variável de configuração git.git commit --amend --cleanup=whitespace
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 sua referência de número de bug.Em teoria, você pode colocar uma
core.commentChar
palavra (vários caracteres), mas o git 2.0.x / 2.1 será mais rigoroso (terceiro trimestre de 2014).Veja commit 50b54fd de Nguyễn Thái Ngọc Duy (
pclouds
) :config: seja rigoroso no core.commentChar
O git 2.0.x / 2.1 (terceiro trimestre de 2014) adicionará uma seleção automática para
core.commentChar
:Consulte commit 84c9dc2
A lista de caracteres candidatos para "auto" é:
Isso significa que um comando como
git commit -m '#1 fixed issue'
alternará automaticamente o commentChar para ';
', porque '#
' foi usado na mensagem de confirmação.fonte
$ git config --global core.commentchar ';'
git config --global core.commentChar auto
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;
de caracteres de comentário:É tudo o que você precisa fazer.
fonte
git commit
para abrir o editor configurado para editar uma mensagem de confirmação!git -c core.commentChar="|" commit --amend
(substitua|
pelo que você quiser).Você pode usar a opção de linha de comando
-m
:fonte
Se você estiver fazendo um rebase interativo, quando você salvar sua mensagem de confirmação sem nada (porque
#
o início fez um comentário e, portanto, foi ignorado), o git mostrará o que você deve fazer:Então, basta alterar a mensagem:
e continue a rebase:
fonte
git commit --cleanup=scissors
deve ser usado. Foi adicionado ao Git v2.0.0 em 2014.05.21de
git commit --help
fonte
commit.cleanup = whitespace
e remover# …
comentários manualmente, como o @CharlesBailey já sugeriu.scissors
-mode limpa adicionalmente a sintaxe da tesoura usada porgit
format-patch
/mailinfo
/am
; ele não usa a…-- >8 --…
sintaxe ao adicionar comentários para confirmar as mensagens .# ...
comentários com muita força. 2. Eu não tenho tanta certeza sobre a segunda parte do seu comentário, oscissors
modo está definitivamente nogit commit --help
. Qual versãogit
você está usando? @ SlippD.Thompsonwhitespace
O modo oferece remoção de 1. linhas vazias iniciais e finais, 2. espaços em branco finais, 3. recolhimento de linhas vazias consecutivas.scissors
oferece remoção de 1. linhas vazias iniciais e finais, 2. espaços em branco finais, 3. recolhimento de linhas vazias consecutivas, 4. tudo (incluindo) a linha# -…- >8 -…-
. No entanto, as linhas de tesoura (# -…- >8 -…-
) são inseridas apenas ao usargit-format-patch
/mailinfo
/am
. Portanto, para um fluxo de trabalho normalgit-commit
/merge
/rebase
/cherry-pick
, oscissors
modo de remoção oferece zero benefício sobre owhitespace
modo. v2.11.0git commit --cleanup=scissors
DOES preceder a# ------------------------ >8 ------------------------
linha antes dagit status
info. Como abaixo: `# ------------------------> 8 ------------------- ----- # Não toque na linha acima. # Tudo abaixo será removido. # No mestre ramo # # Initial comprometer # # Alterações a ser cometidos: # novo arquivo: .gitignore `# ------------------------ >8 ------------------------
antes do status txt “Parece que você pode estar ...” _ ao usarscissors
; no entanto, ele insere a linha da tesoura após o# Conflicts: …
texto. Eu tinhacommit.status = false
colocado no meu.gitconfig
, então não estava vendo nenhum texto de status, apenas o texto dos conflitos. Eu estou corrigido; mudando para voto positivo.Use um prefixo diferente para o número do ticket. Ou acrescente uma palavra ao número do ticket, como "Bug # 42". Ou acrescente um caractere de espaço único à linha; se você deseja remover esse espaço em branco, pode adicionar um gancho de confirmação para isso.
Pessoalmente, eu preferiria não ter esse tipo de manipulação de mensagem de confirmação feita por um gancho, porque pode ser muito irritante quando acionada quando você não deseja. A solução mais fácil é provavelmente repensar o problema.
fonte
#xxx
ocorrer em qualquer lugar na mensagem de confirmação será vinculado ao problema. Não precisa estar no início do commit. Talvez isso tenha mudado nos últimos cinco anos?Todos os meus commits começam com,
#issueNumber
então eu coloquei este boilerplate no meuvim .git/hooks/commit-msg
:Então, vamos supor que temos branch
#15
e fazemos a mensagem de confirmaçãoadd new awesome feature
. Com essa abordagem, a mensagem final de confirmação será#15 add new awesome feature
.fonte