Git commit sem mensagem de commit

108

Como posso confirmar as alterações sem especificar a mensagem de confirmação? Por que é obrigatório por padrão?

Nik
fonte
6
Finalmente, git commit -a --allow-empty-message -m ''nem mesmo abre mais um editor. Veja minha resposta abaixo
VonC
2
No Windows este comando git commit -a --allow-empty-message -m ''marcas comprometer com comprometer mensagem " ''", por isso é melhor usar este comando em vez disso: git commit -a --allow-empty-message -m "".
tav

Respostas:

137

O git geralmente requer uma mensagem não vazia porque fornecer uma mensagem de confirmação significativa faz parte das boas práticas de desenvolvimento e da boa administração do repositório. A primeira linha da mensagem de confirmação é usada em todo lugar dentro do git; para mais informações, leia "Uma nota sobre mensagens de confirmação do Git" .

Se você abrir Terminal.app, cdpara o diretório do seu projeto e git commit -am '', verá que ele falha porque uma mensagem de confirmação vazia não é permitida. As versões mais recentes do git têm o
--allow-empty-messageargumento da linha de comando, incluindo a versão do git incluída na versão mais recente do Xcode. Isso permitirá que você use este comando para fazer um commit com uma mensagem vazia:

git commit -a --allow-empty-message -m ''

Antes da --allow-empty-messagebandeira, você tinha que usar o commit-treecomando de encanamento. Você pode ver um exemplo de uso deste comando no capítulo "Raw Git" do livro Git .

Jeremy W. Sherman
fonte
1
As versões mais recentes do gitpossuem o --allow-empty-messageargumento de linha de comando. Veja a documentação aqui . Ele menciona que você costumava ser capaz de realizar a mesma coisa usando o comando encanamento git-commit-tree.
Jeremy W. Sherman
18
Eu acho que a frase "fornecer uma mensagem de commit significativa é parte de uma boa prática de desenvolvimento" é simplesmente errada - pode-se dizer que fornecer uma mensagem de commit significativa é considerada parte da boa prática de desenvolvimento, já que a declaração é divisiva de qualquer maneira - eu, por exemplo acredite que menos informação às vezes leva a menos confusão, especialmente porque o git obviamente armazena as mudanças reais no repositório, e git diffirá mostrar à parte interessada exatamente o que um commit contém, sem depender de descrições escritas por humanos. As máquinas devem nos poupar do trabalho sempre que possível.
amn
2
@amn, também comecei a me perguntar sobre todas aquelas dezenas de milhares de mensagens de commit bem escritas que escrevi e que nunca serão lidas por ninguém. Para mim agora, o valor desse hábito é que ele me obriga a olhar as mudanças na tentativa de descrevê-las, e isso às vezes me faz notar bugs. Você está certo, no entanto. Vou considerar prestar mais atenção ao código e menos à mensagem de confirmação.
osa
7
Git não é mais usado apenas para desenvolvimento de código. Quando estou atualizando uma página wiki do GitHub ou um documento Overleaf LaTeX, geralmente não há nada a dizer porque estou atualizando a documentação. Tudo semanticamente significativo sobre a mudança está contido no diff. Na verdade, eu me peguei usando o texto da mudança como a própria mensagem de confirmação: completamente redundante!
Jim Pivarski
1
@amn, às vezes a saída de git diffnão é autoexplicativa, mesmo quando o committer acredita que sim.
cowlinator
26

E se você adicionar um alias para ele, é ainda melhor, certo?

git config --global alias.nccommit 'commit -a --allow-empty-message -m ""'

Agora você acabou de fazer um nccommit, nc por causa de nenhum comentário, e tudo deve ser confirmado.

dalvarezmartinez1
fonte
19

Ao trabalhar em uma atualização de código importante, se você realmente precisa de um ponto seguro intermediário, pode apenas fazer:

git commit -am'.'

ou mais curto:

git commit -am.
indolente
fonte
E o que isso faz?
fishinear
Adiciona um commit com a mensagem '.'
indiferente de
Eu uso esse método quando literalmente não tenho nenhuma lembrança do que coloquei em um commit e estou com preguiça de fazer difftudo isso.
TheTechRobo36414519
16

Observação: a partir de git1.8.3.2 (julho de 2013), o seguinte comando ( mencionado acima por Jeremy W Sherman ) não abrirá mais um editor:

git commit --allow-empty-message -m ''

Veja o commit 25206778aac776fc6cc4887653fdae476c7a9b5a :

Se uma mensagem vazia for especificada com a opção -mde git commit, o editor será iniciado.
Isso é inesperado e desnecessário.
Em vez de usar o comprimento da string da mensagem para verificar se o usuário especificou uma, lembre-se diretamente se a opção -mfoi fornecida.


git 2.9 (junho de 2016) melhora o comportamento da mensagem vazia:

Consulte o commit 178e814 (06 de abril de 2016) de Adam Dinwoodie ( me-and) .
Consulte o commit 27014cb (07 de abril de 2016) de Jeff King ( peff) .
(Fundido por Junio ​​C Hamano - gitster- no commit 0709261 , 22 de abril de 2016)

commit: não ignore uma mensagem vazia dada por -m ''

  • " git commit --amend -m '' --allow-empty-message", embora pareça estranho, é uma solicitação válida para alterar o commit para não ter nenhuma mensagem.
    Devido à detecção incorreta da presença de -mna linha de comando, acabamos mantendo a mensagem de log do commit original.
  • " git commit -m "$msg" -F file" deve ser rejeitado seja $msguma string vazia ou não, mas devido ao mesmo bug, não foi rejeitado quando $msgestá vazio.
  • " git -c template=file -m "$msg"" deve ignorar o modelo mesmo quando $msgestá vazio, mas não o fez e, em vez disso, usou o conteúdo do arquivo de modelo.
VonC
fonte
3

Você não precisa do git para fazer isso. O uso criativo de uma função bash resolverá o problema. Se você não se importa com as mensagens, defina uma mensagem padrão e esqueça.

function gitcom() {
  git commit -m "my default commit message"
}

Se você se sentir realmente aventureiro, pode adicionar, confirmar e enviar com um comando

function gitzap() {
  git add . && git commit -m "whatevs" && git push $1 $2
}

Que você então executaria como

gitzap origin master

Você pode até ir mais fundo e usar parse_git_branch para evitar alguns pressionamentos de tecla lá, ou definir um padrão comum de "origem" e "mestre".

Steven Garcia
fonte
1
Você poderia fornecer mais alguns detalhes sobre como configurar esta função bash?
adaam
1
Supondo que você esteja no OSX ou Linux, você pode copiar essas funções e colocá-las em seu .profile (deve estar em sua pasta de início, se não, crie-o). Abra uma nova janela de console e esses comandos estarão disponíveis para você. Quaisquer alterações feitas nesses arquivos exigirão que você atualize a sessão bash para que possa acelerar as coisas adicionando os seguintes aliases a esse arquivo: alias ea = "subl ~ / .profile" # subl é meu editor de texto, substitua pelo seu alias er = "source ~ / .profile" # isto irá zerar. Agora quando você quiser adicionar atalhos, basta digitar "ea" (editar aliases) E para atualizar er
Steven Garcia
2
Se você chama os scripts git-come git-zap(sem extensões) e colocou-os em algum lugar git pode encontrá-los (ou seja, em algum lugar no seu PATH), trata git-los como comandos regulares git e você pode chamá-los assim: git com,git zap origin master
Manuzor
1
no bash é function gitcom {ou gitcom() {TMK, consertar?
2

O Git requer um commit para ter um comentário, caso contrário, não aceitará o commit.

Você pode configurar um modelo padrão com git como sua mensagem de confirmação padrão ou pode procurar a sinalização --allow-empty-message em git. Acho (não tenho 100% de certeza) que você pode reconfigurar o git para aceitar mensagens de commit vazias (o que não é uma boa ideia). Normalmente, cada commit deve ser um pouco trabalhoso, que é descrito por sua mensagem.

Daniel Kurka
fonte
1
Não sei por que essa resposta foi rejeitada. Eu concordo que forçar o Git a aceitar mensagens de commit vazias, ou usar uma mensagem como 'salvar', é uma má ideia. Pare de lutar e apenas aprenda a maldita ferramenta.
Jezen Thomas
2

Eu tenho a seguinte configuração em meu projeto privado:

git config alias.auto 'commit -a -m "changes made from [device name]"'

Assim, quando estou com pressa, faço

git auto
git push

E pelo menos eu sei de qual dispositivo o commit foi feito.

e18r
fonte
1

Encontrei a solução mais simples:

git commit -am'save'

Isso é tudo, você vai trabalhar em torno do git commit message.

você pode até salvar esse pedido em uma festa ou outra coisa para torná-lo mais simples.

Os membros da nossa equipe sempre escrevem essas mensagens, mas quase ninguém as verá novamente.

Commit message é algo que mata o tempo, pelo menos em nossa equipe, então nós a ignoramos.

homem de bronze
fonte
-5

A mensagem de confirmação é uma prática recomendada que deve ser seguida em todos os momentos. A menos que você seja o único desenvolvedor e isso não vá mudar tão cedo.

git commit -a -m 'asdfasdfadsfsdf'
coloradoblue
fonte
isso é uma espécie de piada. Mas para pequenos commits que você TEM que fazer para enviar as alterações para o heroku (por exemplo), está tudo bem na única instância do desenvolvedor.
coloradoblue