从命令行向'git commit -m'添加换行符

时间:2011-02-21 10:02:42

标签: git bash shell

我在命令行中使用Git,并尝试在提交消息中添加换行符(使用git commit -m "")而不进入Vim。

这可能吗?

17 个答案:

答案 0 :(得分:573)

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

git commit -m 'Message
goes
here'

或者,您可以使用“此处文档”:

git commit -F- <<EOF
Message
goes
here
EOF

答案 1 :(得分:399)

如果您只想要一条头条和一条内容,您可以使用:

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

答案 2 :(得分:377)

在Bash的命令行中使用Git,您可以执行以下操作:

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

只需输入并按 Enter 即可获得新行“&gt;”符号表示您已按 Enter ,并且有一个新行。其他答案也有效。

答案 3 :(得分:90)

你应该可以使用

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

来自Bash manual

  

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

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

答案 4 :(得分:83)

在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

你应该得到这样的东西:

Multi-line Git commit message in PowerShell

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

答案 5 :(得分:40)

做类似

的事情
git commit -m"test\ntest"

不起作用,但

之类的东西
git commit -m"$(echo -e "test\ntest")"

有效,但不是很漂亮。您在git-commitlb中设置了PATH命令,其中包含以下内容:

#!/bin/bash

message=$1

git commit -m"$(echo -e "$message")"

并像这样使用它:

git commitlb "line1\nline2\nline3"

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

git commitlb "line1\n\nline2\nline3"

答案 6 :(得分:34)

我希望这不会过于远离发布的问题,但setting the default editor然后使用

git commit -e

可能会更舒服。

答案 7 :(得分:28)

来自Git documentation

  

-m&lt; msg&gt;
  --message = LT; MSG&GT;
  使用给定的&lt; msg&gt;作为提交消息。如果给出了多个NSScrollView *scrollView = [[NSScrollView alloc] initWithFrame:NSZeroRect]; _collectionView = [[NSCollectionView alloc] initWithFrame:NSZeroRect]; scrollView.documentView = _collectionView; [self.view addSubview:scrollView]; 选项,则将它们的值连接为单独的段落。

因此,如果您正在寻找分组多个提交消息,那么应该完成这项工作:

-m

答案 8 :(得分:19)

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

答案 9 :(得分:18)

没有必要使这些东西复杂化。通过按 Enter 获取-m "text...下一行后。按下 Enter 时,会出现>。完成后,只需输入"并按 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:   Mon Oct 9 13:30:26 2017 +0200

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

答案 10 :(得分:7)

在Bash / Zsh中,您只需在引号内使用文字换行符:

git commit -m 'Multi-line
commit
message'

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

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

您还可以指示Git使用其他编辑器。来自git-commit上的文档:

  

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

答案 11 :(得分:6)

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

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

这就是我.bashrc中的内容:

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

答案 12 :(得分:5)

就我个人而言,我发现最简单的方法是在vi(或者你选择的git编辑器)之后修改提交消息,而不是在命令行上修改,git commit --amend在{git commit之后1}}。

答案 13 :(得分:2)

我看不到有人提到如果您不提供消息,它将为您打开nano(至少在Linux中是这样),您可以在其中编写多行代码...

只需要这样做:

git commit

答案 14 :(得分:1)

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

  • git commit -m 'Hello 输入不起作用:它不会要求换行

  • git commit -m "Hello 输入 idem

  • git commit -m "Hello^ 输入 idem

  • git commit -m 'Hello^ 输入 World'似乎可以正常工作,因为它询问“更多?” 并允许写新行,但是最后,在进行git log时,您会看到它仍然是单行消息...

TL; DR:即使在Windows上,命令行解析也可以differently,并且^允许多行输入,但这在这里无济于事。

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

答案 15 :(得分:0)

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

这是我所做的:

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

虽然这仍然很丑陋,但它允许使用“单线”,这可能仍然有用。通常情况下,字符串是变量或与变量组合在一起,因此可以将丑陋程度降至最低。

答案 16 :(得分:0)

IMO,最初的提交消息行应该很短,而不是段落。所以使用 git commit -m "<short_message>" 足够

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

git commit --amend

这将打开vim,然后我们可以输入提交消息的说明,我认为这比命令行更容易。