从命令行将换行符添加到'git提交-m'

我正在从命令行使用Git,并尝试在不进入Vim的情况下向提交消息(使用git commit -m "")添加换行符。

这可能吗?

413618 次浏览

在Bash/Zsh中,您可以简单地在引号中使用文字换行符:

git commit -m 'Multi-linecommitmessage'

ANSI-C引用也适用于Bash/Zsh:

git commit -m $'Multi-line\ncommit\nmessage'

您还可以指示Git使用您选择的编辑器来编辑提交消息。从组件提交上的文档中:

用于编辑提交日志消息的编辑器将从GIT_EDITOR环境变量,core.editor配置变量,VISUAL环境变量或EDITOR环境变量(按此顺序)。有关详细信息,请参阅git-var

因此,例如,要使用nano编辑您的消息,您可以运行:

export GIT_EDITOR=nanogit commit

当然,它是如何完成的取决于你的shell。在Bash中,你可以在消息周围使用单引号,并且可以保持引号打开,这将使Bash提示另一行,直到你关闭引号。像这样:

git commit -m 'Message
goeshere'

或者,您可以使用“这里的文档”(也称为heldoc):

git commit -F- <<EOFMessage
goeshereEOF

我在Mac上使用zsh,我可以在双引号(")中发布多行提交消息。基本上,我一直在输入并按下返回键以获取新行,但在我关闭引号并返回之前,消息不会发送到Git。

做一些像

git commit -m"test\ntest"

不起作用,但是像这样的东西

git commit -m"$(echo -e "test\ntest")"

可以工作,但不是很漂亮。您在PATH中设置了一个git-commitlb命令,它的作用如下:

#!/bin/bash
message=$1
git commit -m"$(echo -e "$message")"

并像这样使用它:

git commitlb "line1\nline2\nline3"

警告,我有一种感觉,一般惯例是将摘要行作为第一行,然后是两个换行符,然后是提交消息中的扩展消息,所以这样做会破坏该惯例。你当然可以这样做:

git commitlb "line1\n\nline2\nline3"

你应该可以用

git commit -m $'first line\nsecond line'

bash手册

$'字符串'形式的单词被特殊处理。这个词扩展到字符串,将反斜杠转义字符替换为指定的ANSI C标准。

这包括对如上所示的换行符的支持,以及十六进制和Unicode代码等。转到链接部分以查看反斜杠转义字符的列表。

如果你只是想要,比如说,一个标题行和一个内容行,你可以使用:

git commit -m "My head line" -m "My content line."

请注意,这会创建单独的段落-而不是行。因此,每两行-m行之间会有一个空行,例如:

My head line
My content line.

从命令行使用Git和Bash,您可以执行以下操作:

git commit -m "this is> a line> with new lines> maybe"

当您想要一个新行时,只需键入并按输入,“>”符号表示您已按输入,并且有一个新行。其他答案也有效。

将换行符添加到您的Git提交

尝试以下操作以创建多行提交消息:

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."

然后验证你做了什么:

git log -1

你应该以这样的方式结束:

PowerShell中的多行Git提交消息

屏幕截图来自我使用PowerShell和Poshgit设置的示例。

这适用于所有终端和操作系统AFAIK。

这里有一个bash的例子:

git中的多行提交消息

导致这个提交:

多行提交

我希望这不会偏离发布的问题太远,但是设置默认编辑器然后使用

git commit -e

可能会舒服得多。

就个人而言,我发现在vi(或您选择的任何git编辑器)之后修改提交消息比在命令行上更容易,方法是在git commit之后执行git commit --amend

git留档

-m
--消息=
使用给定的作为提交消息。如果给出了多个-m选项,它们的值将连接为单独的段落。

因此,如果您正在寻找对多个提交消息进行分组,这应该可以完成工作:

git commit -m "commit message1" -m "commit message2"

如果您使用的是Bash,请按C-x C-eCtrl+xCtrl+e),它将在您首选的编辑器中打开当前命令。

您可以通过调整VISUALEDITOR来更改首选编辑器。

这就是我的.bashrc

export ALTERNATE_EDITOR=''export EDITOR='emacsclient -t'export VISUAL='emacsclient -c'export SUDO_EDITOR='emacsclient -t'

没有必要把事情复杂化。在-m "text...之后,按下输入会得到下一行。当输入被按下时,就会出现>。当你完成后,只需放"并按输入

$ 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 -1commit 5474e383f2eda610be6211d8697ed1503400ee42 (HEAD -> test2)Author: ************** <*********@gmail.com>Date:   Mon Oct 9 13:30:26 2017 +0200
Another way of demonstrating multicommit messages:
This is a new line writtenThis is another new line writtenThis one is really awesome too and we can continue doing so till ...

[编辑05-05-2021]

对于windows用户,请使用适用于Windows的GitBash。内置的Windowscmd不适用于此方法。

以下是带有标准cmd.exeshell的Windows上的失败解决方案列表(为您节省一些试错时间!):

  • git commit -m 'Helloenter不起作用:它不会请求新行

  • git commit -m "Hello输入idem

  • git commit -m "Hello^输入idem

  • git commit -m 'Hello^enterWorld'看起来像工作,因为它要求“更多?”并允许编写新行,但最后在执行git log时,您会看到它仍然是一行消息……

太长别读:即使在Windows上,命令行解析工作不同^允许多行输入,在这里也没有帮助。

最后git commit -e可能是最好的选择。

可悲的是,git似乎不允许在其消息中使用任何换行符。上面已经有各种合理的解决方案,但是在编写脚本时,这些都很烦人。这里的文档也可以工作,但也可能有点太烦人了(想想yaml文件)

以下是我所做的:

git commit \--message "Subject" \--message "First line$(echo)Second line$(echo)Third Line"

虽然这仍然很难看,但它允许“单行”,这可能仍然有用。由于通常字符串是变量或与变量组合,uglynes可以保持在最低限度。

我没有看到有人提到,如果你不要提供消息,它会为你打开纳米(至少在Linux),你可以在那里写多行…

只需要这样:

git commit

IMO初始提交消息行应该是简短的,到点而不是段落。所以使用git commit -m "<short_message>"就够了

之后,为了扩展我们可以使用的初始提交消息

git commit --amend

这将打开vim,然后我们可以输入提交消息的解释,在我看来,这比命令行更容易。

我一直在寻找这个问题的答案,因为很多时候,我曾经看到正则表达式用于检查提交消息。无论如何,在使用-m标志创建提交时没有任何想法。

因此,实现多行提交消息的最简单方法是仅在终端中键入git commit
然后,您将有机会输入您想要的注释:input_commit_message

不需要更复杂的方法。