Adicione quebra de linha ao 'git commit -m' na linha de comando
746
Estou usando o Git na linha de comando e estou tentando adicionar uma quebra de linha à mensagem de confirmação (usando git commit -m "") sem entrar no Vim.
Algo como GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -eajudaria a evitar vim.
jotik
Respostas:
694
Certamente, como isso é feito depende do seu shell. No Bash, você pode usar aspas simples ao redor da mensagem e apenas deixar a cotação aberta, o que fará com que o Bash solicite outra linha até que você feche a cotação. Como isso:
git commit -m 'Message
goes
here'
Como alternativa, você pode usar um "documento aqui" (também conhecido como heredoc):
A resposta de @Peter Farmer mais tarde menciona que a convenção do Git é aparentemente algo como: 1 linha para resumo, duas quebras de linha e, em seguida, uma mensagem detalhada.
Nick Spacek 14/10
4
Além disso, veja abaixo a publicação de @esse. Um simples retorno de carro faz o truque.
Hakan Ensari
6
@MohamadAli, no Windows, análise de linha de comando funciona de forma diferente
Simon Richter
2
@KelvinShadewing, sim, mas com a diferença de que as regras de substituição de shell se aplicam à mensagem, você precisa escapar de cifrões e outros metacaracteres. Por outro lado, permite usar variáveis.
22617 Simon Simonter
2
@ Nikhil, muitos programas suportam um único traço como um nome de arquivo para significar stdin ou stdout. Com o documento aqui , o gitcomando pode ler o texto da mensagem a partir de stdin e a -Fopção fornece o nome do arquivo para leitura da mensagem.
Simon Richter
515
Se você quiser apenas, digamos, uma linha de cabeçalho e uma linha de conteúdo, você pode usar:
git commit -m "My head line"-m "My content line."
Observe que isso cria parágrafos separados - não linhas. Portanto, haverá uma linha em branco entre cada duas -mlinhas, por exemplo:
Isso tem o benefício de trabalhar no Windows, onde truques de citações mencionados em outros lugares não funcionam. Separe -mpara cada linha. Agradável!
precisa
8
As mensagens criadas usando esse método são exibidas corretamente no GitHub, GitHub for Windows e TortoiseGit.
Richard
12
@ddotsenko este é o benefício de trabalhar em Linux / Mac, onde temos um shell decente =)
Ciro Santilli郝海东冠状病六四事件法轮功
7
De man git commit: -m <msg>, --message = <msg> Use o <msg> fornecido como a mensagem de confirmação. Se várias opções -m forem fornecidas, seus valores serão concatenados como parágrafos separados.
Amedee Van Gasse
55
Observe que isso cria parágrafos separados - não linhas. Portanto, haverá uma linha em branco entre cada duas -mlinhas.
Ohad Schneider
398
Usando o Git na linha de comando com o Bash, você pode fazer o seguinte:
git commit -m "this is
> a line
> with new lines
> maybe"
Basta digitar e pressionar Enterquando desejar uma nova linha, o símbolo ">" significa que você pressionou Entere há uma nova linha. Outras respostas também funcionam.
A resposta de Abizern me esclareceu por que isso funciona - o shell Bash interpreta um pressionamento de tecla <kbd> Enter </kbd> como uma nova linha até que o primeiro caractere de aspas duplas seja 'fechado' (com um caractere de aspas duplas subsequente).
21713 Kenny Evitt
1
Devo concordar que esta é uma solução muito mais eficaz, mais fácil e prática que a resposta aceita. Funciona bem para mim usando o Git 1.8.2.1. +1 de mim.
precisa saber é
Esta não é uma função especial da tecla Enter , mas sim relacionada às aspas. Se você usa aspas duplas ou simples, não importa realmente, exceto a expansão variável e os caracteres especiais que escapam - foi por isso que escolhi aspas simples na minha resposta.
Simon Richter
2
Não use isso no zsh! O terminal será fechado e você perderá o que digitou.
Palavras da forma $ ' string ' são tratadas especialmente. A palavra se expande para
cadeia , com caracteres de escape com barra invertida substituídos conforme especificado pelo padrão ANSI C.
Isso inclui suporte para novas linhas, como mostrado acima, além de códigos hexadecimais e Unicode e outros. Vá para a seção vinculada para ver uma lista dos caracteres com escape de barra invertida.
@rsy: Qual versão do Bash você está usando? O que você vê quando faz echo $'one\ntwo'?
Pausado até novo aviso.
1
rsy $ bash - versão GNU bash, versão 3.2.53 (1) -release (x86_64-apple-darwin13) Copyright (C) 2007 Free Software Foundation, Inc. A saída desse comando é, como esperado, mostrada em dois diferentes linhas!
ccoutinho
para mim no Windows 7 é a melhor opção Obrigado
Mohamad Ali
2
O $ é a chave aqui e eu não o notei à primeira vista. Caso contrário, apenas recebo um \ n no meio da minha mensagem.
22417 ChrisBob
1
Você nem precisa usar o $ '...' para toda a string; usando este apenas em torno do caractere de nova linha vai funcionar: git commit -m "first line"$'\n'"second line". Apenas observe que você precisa fechar a string anterior antes de iniciar o seu $'string'.
precisa saber é o seguinte
95
Adicionando quebras de linha ao seu commit do Git
Tente o seguinte para criar uma mensagem de confirmação de várias linhas:
git commit -m "Demonstrate multi-line commit message in Powershell"-m "Add a title to your commit after -m enclosed in quotes,
then add the body of your comment after a second -m.
Press ENTER before closing the quotes to add a line break.
Repeat as needed.
Then close the quotes and hit ENTER twice to apply the commit."
Em seguida, verifique o que você fez:
git log -1
Você deve terminar com algo assim:
A captura de tela é de um exemplo que eu configurei usando o PowerShell com Poshgit.
Resposta incrível. Eu procurei por isso há séculos e tentei várias maneiras diferentes de formatar minhas mensagens de confirmação do Git, mas isso funciona melhor. Posso confirmar que funciona imediatamente com o Git 1.8.2.1.
precisa saber é o seguinte
1
Em PowerShell que você pode fazer `n de quebra de linha
Ecropolis
2
Funcionou muito para mim no Git Bash para Windows .
Ulysses Alves
1
Esta deve ser a resposta escolhida por ser o método mais compatível, isso não confiar em qualquer CLI específico prompt de como algumas outras sugestões fazer ..
1
Esta é uma resposta melhor e deve ser selecionada como a resposta. Não apenas isso está alinhado como um comportamento padrão, e fornece uma mensagem de confirmação muito mais limpa, mas também é um pouco mais flexível com vários m. Além disso, embora pareça específico do Windows e tenha atraído comentários relacionados ao Windows, ele funciona bem no Linux também.
0xc0de 9/04
44
Fazendo algo como
git commit -m"test\ntest"
não funciona, mas algo como
git commit -m"$(echo -e "test\ntest")"
funciona, mas não é muito bonito. Você configura um git-commitlbcomando no seu PATHque faz algo como isto:
Aviso: tenho a sensação de que a convenção geral é ter uma linha de resumo como a primeira linha e, em seguida, duas quebras de linha e, em seguida, uma mensagem estendida na mensagem de confirmação, portanto, fazer algo parecido com isso quebraria essa convenção. Você poderia, é claro, fazer:
-m <msg>
--message = <msg>
Use o <msg> fornecido como a mensagem de confirmação. Se várias -mopções forem fornecidas, seus valores serão concatenados como parágrafos separados.
Portanto, se você estiver procurando agrupar várias mensagens de confirmação, isso deve funcionar:
você pode deixar fora o -ee ainda vai abrir o editor
djangonaut
Esta foi a resposta que eu estava procurando.
Tinmarino 14/09
28
Não há necessidade de complicar as coisas. Após a -m "text...próxima linha é obtida pressionando Enter. Quando Enteré pressionado >aparece. Quando terminar, basta colocar "e pressionar Enter:
$ git commit -m "Another way of demonstrating multicommit messages:
>
> This is a new line written
> This is another new line written
> This one is really awesome too and we can continue doing so till ..."
$ git log -1
commit 5474e383f2eda610be6211d8697ed1503400ee42(HEAD -> test2)Author:**************<*********@gmail.com>Date:MonOct913:30:262017+0200Another way of demonstrating multicommit messages:This is a new line written
This is another new line written
This one is really awesome too and we can continue doing so till ...
Esta é uma ótima resposta, novas linhas são mostradas corretamente no Github. A primeira linha é exibida como um cabeçalho.
Yogesh Umesh Vaity
18
Uso o zsh em um Mac e posso postar mensagens de confirmação de várias linhas entre aspas duplas ("). Basicamente, continuo digitando e pressionando return para novas linhas, mas a mensagem não é enviada para o Git até fechar as aspas e retornar .
Você também pode instruir o Git a usar um editor de sua escolha para editar a mensagem de confirmação. Nos documentos sobre git-commit :
O editor usado para editar a mensagem de log de confirmação será escolhido na
GIT_EDITORvariável de ambiente, na core.editorvariável de configuração, na VISUALvariável de ambiente ou na EDITOR
variável de ambiente (nessa ordem). Veja git-var para detalhes.
Pessoalmente, acho mais fácil modificar as mensagens de confirmação após o fato vi(ou qualquer que seja o seu editor de git de escolha), e não na linha de comando, fazendo git commit --amendlogo depois git commit.
Então, por que alguém negou isso? Esta é a maneira mais conveniente de trabalhar com comandos de múltiplas linhas no bash, basta configurá-lo imediatamente. Eu tenho usado outras sugestões estúpidas mostradas em outras respostas aqui, mas depois que você aprende a editar seus comandos no seu editor de texto favorito, simplesmente não há caminho de volta.
Aleks-Daniel Jakimenko-A.
1
Isso é tão dolorosamente útil que simplesmente não consigo acreditar que vivi meus últimos anos sem isso.
SoonDead
2
Aqui está uma lista de soluções com falha no Windows com o shell cmd.exe padrão (para economizar tempo de tentativa e erro!):
git commit -m 'HelloEnter não funciona: não pedirá uma nova linha
git commit -m "HelloEnter idem
git commit -m "Hello^Enter idem
git commit -m 'Hello^EnterWorld'parece trabalhar porque pede "mais?" e permite escrever uma nova linha, mas finalmente, ao fazer git logisso, você verá que ainda é uma mensagem de uma linha ...
TL; DR: Mesmo que no Windows, a análise de linha de comando funcione de maneira diferente e ^permita a entrada de várias linhas, não ajuda aqui.
Finalmente, git commit -eé provavelmente a melhor opção.
Só não use essa desculpa triste e triste para uma "concha" do Windows.
jthill
2
Infelizmente, o git não parece permitir nenhum caractere de nova linha em sua mensagem. Já existem várias soluções razoáveis acima, mas quando o script é irritante. Aqui os documentos também funcionam, mas também podem ser um pouco chatos para lidar (pense em arquivos yaml)
Embora isso também seja feio, permite 'one-liners' que podem ser úteis ainda. Como geralmente as seqüências de caracteres são variáveis ou combinadas com variáveis, os feios podem ser mantidos no mínimo.
Não vejo ninguém mencionando que, se você não fornecer uma mensagem, ela abrirá o nano para você (pelo menos no Linux), onde você poderá escrever várias linhas ...
GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -e
ajudaria a evitarvim
.Respostas:
Certamente, como isso é feito depende do seu shell. No Bash, você pode usar aspas simples ao redor da mensagem e apenas deixar a cotação aberta, o que fará com que o Bash solicite outra linha até que você feche a cotação. Como isso:
Como alternativa, você pode usar um "documento aqui" (também conhecido como heredoc):
fonte
git
comando pode ler o texto da mensagem a partir de stdin e a-F
opção fornece o nome do arquivo para leitura da mensagem.Se você quiser apenas, digamos, uma linha de cabeçalho e uma linha de conteúdo, você pode usar:
Observe que isso cria parágrafos separados - não linhas. Portanto, haverá uma linha em branco entre cada duas
-m
linhas, por exemplo:fonte
-m
para cada linha. Agradável!man git commit
: -m <msg>, --message = <msg> Use o <msg> fornecido como a mensagem de confirmação. Se várias opções -m forem fornecidas, seus valores serão concatenados como parágrafos separados.-m
linhas.Usando o Git na linha de comando com o Bash, você pode fazer o seguinte:
Basta digitar e pressionar Enterquando desejar uma nova linha, o símbolo ">" significa que você pressionou Entere há uma nova linha. Outras respostas também funcionam.
fonte
Você deve poder usar
No manual do Bash :
Isso inclui suporte para novas linhas, como mostrado acima, além de códigos hexadecimais e Unicode e outros. Vá para a seção vinculada para ver uma lista dos caracteres com escape de barra invertida.
fonte
echo $'one\ntwo'
?git commit -m "first line"$'\n'"second line"
. Apenas observe que você precisa fechar a string anterior antes de iniciar o seu$'string'
.Adicionando quebras de linha ao seu commit do Git
Tente o seguinte para criar uma mensagem de confirmação de várias linhas:
Em seguida, verifique o que você fez:
Você deve terminar com algo assim:
A captura de tela é de um exemplo que eu configurei usando o PowerShell com Poshgit.
fonte
Fazendo algo como
não funciona, mas algo como
funciona, mas não é muito bonito. Você configura um
git-commitlb
comando no seuPATH
que faz algo como isto:E use-o assim:
Aviso: tenho a sensação de que a convenção geral é ter uma linha de resumo como a primeira linha e, em seguida, duas quebras de linha e, em seguida, uma mensagem estendida na mensagem de confirmação, portanto, fazer algo parecido com isso quebraria essa convenção. Você poderia, é claro, fazer:
fonte
Da documentação do Git :
Portanto, se você estiver procurando agrupar várias mensagens de confirmação, isso deve funcionar:
fonte
Espero que isso não esteja muito longe da pergunta postada, mas defina o editor padrão e use
pode ser muito mais confortável.
fonte
-e
e ainda vai abrir o editorNão há necessidade de complicar as coisas. Após a
-m "text...
próxima linha é obtida pressionando Enter. Quando Enteré pressionado>
aparece. Quando terminar, basta colocar"
e pressionar Enter:fonte
Uso o zsh em um Mac e posso postar mensagens de confirmação de várias linhas entre aspas duplas ("). Basicamente, continuo digitando e pressionando return para novas linhas, mas a mensagem não é enviada para o Git até fechar as aspas e retornar .
fonte
No Bash / Zsh, você pode simplesmente usar quebras de linha literais entre aspas:
A cotação ANSI-C também funciona no Bash / Zsh:
git commit -m $'Multi-line\ncommit\nmessage'
Você também pode instruir o Git a usar um editor de sua escolha para editar a mensagem de confirmação. Nos documentos sobre git-commit :
fonte
Pessoalmente, acho mais fácil modificar as mensagens de confirmação após o fato
vi
(ou qualquer que seja o seu editor de git de escolha), e não na linha de comando, fazendogit commit --amend
logo depoisgit commit
.fonte
git commit -e
.git commit
, e ele abrirá um editor com um modelo de mensagem de confirmação.Se você estiver usando o Bash, pressione
C-x C-e
( Ctrl+ x Ctrl+ e) e ele abrirá o comando atual no seu editor preferido.Você pode alterar o editor preferido ajustando
VISUAL
eEDITOR
.É isso que tenho no meu
.bashrc
:fonte
Aqui está uma lista de soluções com falha no Windows com o shell cmd.exe padrão (para economizar tempo de tentativa e erro!):
git commit -m 'Hello
Enter não funciona: não pedirá uma nova linhagit commit -m "Hello
Enter idemgit commit -m "Hello^
Enter idemgit commit -m 'Hello^
EnterWorld'
parece trabalhar porque pede "mais?" e permite escrever uma nova linha, mas finalmente, ao fazergit log
isso, você verá que ainda é uma mensagem de uma linha ...TL; DR: Mesmo que no Windows, a análise de linha de comando funcione de maneira diferente e
^
permita a entrada de várias linhas, não ajuda aqui.Finalmente,
git commit -e
é provavelmente a melhor opção.fonte
Infelizmente, o git não parece permitir nenhum caractere de nova linha em sua mensagem. Já existem várias soluções razoáveis acima, mas quando o script é irritante. Aqui os documentos também funcionam, mas também podem ser um pouco chatos para lidar (pense em arquivos yaml)
Aqui está o que eu fiz:
Embora isso também seja feio, permite 'one-liners' que podem ser úteis ainda. Como geralmente as seqüências de caracteres são variáveis ou combinadas com variáveis, os feios podem ser mantidos no mínimo.
fonte
Não vejo ninguém mencionando que, se você não fornecer uma mensagem, ela abrirá o nano para você (pelo menos no Linux), onde você poderá escrever várias linhas ...
Apenas isso é necessário:
fonte