【问题标题】:Add line break to 'git commit -m' from the command line从命令行向“git commit -m”添加换行符
【发布时间】:2011-07-01 04:14:39
【问题描述】:

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

这可能吗?

【问题讨论】:

标签: git bash shell


【解决方案1】:

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

git commit -m 'Message

goes
here'

或者,您可以使用“here document”(也称为 heredoc):

git commit -F- <<EOF
Message

goes
here
EOF

【讨论】:

  • @Peter Farmer 稍后的回答提到 Git 约定显然类似于:1 行摘要,两个换行符,然后是详细消息。
  • 另外,请参阅@esse 的以下帖子。一个简单的回车就可以了。
  • @MohamadAli,在 Windows 上,命令行解析工作 differently
  • @KelvinShadewing,是的,但不同之处在于外壳替换规则适用于消息,因此您需要转义美元符号和其他元字符。另一方面,它允许您使用变量。
  • @Nikhil,许多程序支持单个破折号作为文件名来表示标准输入或标准输出。使用here documentgit 命令可以从标准输入读取消息文本,-F 选项给出读取消息的文件名。
【解决方案2】:

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

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

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

My head line

My content line.

【讨论】:

  • 这有利于在 Windows 上工作,而在其他地方引用的技巧不起作用。为每一行分隔-m。不错!
  • 使用此方法创建的消息在 GitHub、GitHub for Windows 和 TortoiseGit 上正确显示。
  • @ddotsenko 这是在 Linux / Mac 上工作的好处,我们有一个不错的 shell =)
  • 来自man git commit: -m , --message= 使用给定的 作为提交信息。如果给出多个 -m 选项,它们的值将连接为单独的段落。
  • 请注意,这会创建单独的 段落 - 而不是行。所以每两行-m之间会有一个空行。
【解决方案3】:

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

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

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

【讨论】:

  • Abizern's answer 为我解释了为什么这样做 - Bash shell 将 Enter 按键解释为新行,直到第一个双引号字符被“关闭”(带有后续的双引号字符)。
  • 我不得不同意这是一个比公认的答案更有效、更容易和更实用的解决方案。使用 Git 1.8.2.1 对我来说效果很好。来自我的 +1。
  • 这不是 Enter 键的特殊功能,而是与引号有关。使用双引号还是单引号并不重要,除了变量扩展和转义特殊字符——这就是我在回答中选择单引号的原因。
  • 不要在 zsh 中使用这个!终端将关闭,您会丢失输入的内容。
  • 适用于 Windows 的 Gitbash。
【解决方案4】:

在 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 和 Poshgit 设置的示例。

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

这是一个使用 bash 的示例:

导致此提交:

【讨论】:

  • 很棒的答案。我已经为此寻找了很多年,并尝试了许多不同的方式来格式化我的 Git 提交消息,但这是最好的。我可以确认它在 Git 1.8.2.1 的提示下工作。
  • 在 Powershell 中你可以用 `n 换行
  • 它在 Windows 版 Git Bash 中对我非常有用。
  • 应该 是选择的答案,因为它是最兼容的方法,这不像其他一些建议那样依赖任何特定的 CLI 提示..
  • 这是一个更好的答案,应该被选为答案。这不仅符合默认行为,并提供了更清晰的提交消息,而且使用多个 -m 更加灵活。此外,尽管它看起来特定于 Windows 并吸引了与 Windows 相关的 cmets,但它在 Linux 中也能正常工作。
【解决方案5】:

你应该可以使用

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

来自Bash manual

$'string' 形式的单词被特殊处理。该词扩展为 字符串,用反斜杠转义字符替换为 ANSI C 标准。

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

【讨论】:

  • @rsy:你使用的是什么版本的 Bash?当你做echo $'one\ntwo' 时你看到了什么?
  • rsy$ bash --version GNU bash, version 3.2.53(1)-release (x86_64-apple-darwin13) 版权所有 (C) 2007 Free Software Foundation, Inc. 该命令的输出是,正如预期的那样,显示在两条不同的行中!
  • 对我来说,在 Windows 7 上这是最好的选择,谢谢
  • $ 是这里的关键,我乍一看并没有注意到它。否则我只会在我的消息中间得到一个 \n。
  • 您甚至不必为整个字符串使用 $'...';在换行符周围使用它会起作用:git commit -m "first line"$'\n'"second line"。请注意,您必须在开始 $'string' 之前关闭前一个字符串。
【解决方案6】:

没有必要把事情复杂化。在-m "text... 之后按Enter 得到下一行。当按下 Enter 时,&gt; 出现。完成后,只需输入" 并按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 ...

[编辑 05-05-2021]

Windows 用户请使用GitBash for Windows。内置 Windows cmd 不适用于此方法。

【讨论】:

  • 这个答案没有得到足够的爱!
  • 这是一个很好的答案,新行在 Github 上正确显示。第一行显示为标题。
  • @DRP,使用GitBash for Windows。我使用的是 Windows 计算机,并且在使用 GitBash for Windows 时效果很好
  • 我现在有了使用 gitbash 的新理由。以前,它仅用于表情符号支持?
【解决方案7】:

来自Git documentation

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

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

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

【讨论】:

  • 不可知的解决方案(独立于外壳)。谢谢你。我们需要 RTFM :)
【解决方案8】:

做类似的事情

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"

【讨论】:

    【解决方案9】:

    我希望这不会离发布的问题太远,而是 setting the default editor 然后使用

    git commit -e
    

    可能会舒服得多。

    【讨论】:

    • 这个应该是最好的答案。
    • 你可以离开-e,它仍然会打开编辑器
    • 这是我一直在寻找的答案。
    【解决方案10】:

    在 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

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

    export GIT_EDITOR=nano
    git commit
    

    【讨论】:

      【解决方案11】:

      我在 Mac 上使用 zsh,我可以在双引号 (") 内发布多行提交消息。基本上,我一直在输入并按回车键换行,但直到我关闭消息才会发送到 Git引用并返回。

      【讨论】:

      • 你可以在 bash 中做同样的事情。
      【解决方案12】:

      如果您使用 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'
      

      【讨论】:

      • 那么为什么有人反对这个?这是在 bash 中使用多行命令最方便的方法,您只需正确配置一次。我一直在使用此处其他答案中显示的其他愚蠢建议,但是一旦您学会在自己喜欢的文本编辑器中编辑命令,就没有回头路了。
      • 这非常有用,我简直不敢相信我过去几年没有这个。
      【解决方案13】:

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

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

      • git commit -m "Hello 输入同上

      • git commit -m "Hello^ 输入同上

      • git commit -m 'Hello^ Enter World' 看起来像在工作,因为它询问 “更多?” 并允许写一个新行,但最后是在做 @ 987654328@你会看到还是单行消息...

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

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

      【讨论】:

        【解决方案14】:

        就个人而言,我发现在vi(或您选择的任何 git 编辑器)中而不是在命令行中修改提交消息最​​简单,方法是在 git commit 之后立即执行 git commit --amend

        【讨论】:

        • 只需使用git commit -e,您无需修改​​即可获得相同的结果。
        • 或者只是git commit,它会打开一个带有提交消息模板的编辑器。
        【解决方案15】:

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

        只需要这个:

        git commit
        

        【讨论】:

          【解决方案16】:

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

          这是我所做的:

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

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

          【讨论】:

            【解决方案17】:

            我一直在寻找该问题的任何答案,因为我曾经多次看到 regexes 来检查 commit 消息。无论如何,在使用-m 标志创建提交期间没有任何想法。

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

            不需要更复杂的方法。

            【讨论】:

              【解决方案18】:

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

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

              git commit --amend

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

              【讨论】:

                猜你喜欢
                • 2022-01-21
                • 1970-01-01
                • 2021-01-10
                • 1970-01-01
                • 2022-01-08
                • 2022-12-16
                • 2019-03-18
                • 1970-01-01
                相关资源
                最近更新 更多