如何将git commit消息分成多行?

时间:2015-04-29 02:36:24

标签: git commit

当我使用git log查看我的提交说明时,如

1. what I changed
2. blank line
3. why I changed it

在3行中,不像1. what i changed 2. blank line 3. why i changed只在一行中。

6 个答案:

答案 0 :(得分:54)

您只需使用以下命令:

$ git commit -m "1. what i changed
> 2. blank line
> 3. why i changed"

在您的终端中,只需按“输入”即可获得新行。在添加结束引用之前,提交消息不会结束。 git日志将如下所示:

$ git log
commit abcde2f660c707br2d20411581c4183170c3p0c2
Author: Alex Pan <alexpan@stackoverflow.com>
Date:   Tue Apr 28 20:52:44 2015 -0700

    1. what i changed
    2. blank line
    3. why i changed

答案 1 :(得分:20)

摘自文件

-m <msg>

--message=<msg>
     

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

在你的情况下,它完全符合你的要求,在第一行和第二行之间插入一个空行

git commit -m "what I changed" -m "why I changed it"

如果您想修改以前添加的评论

,这非常有用

答案 2 :(得分:9)

我发现将提交消息保存到文件更容易,然后使用-F选项。

示例:

$ cat > /tmp/commit_msg.txt
DE123 bug fix: incorrect fetching of instance details
- fixed this and that
- also did such and such
$ git commit -F /tmp/commit_msg.txt

您还可以使用编辑器在提交之前编辑消息文件。

答案 3 :(得分:7)

您描述的多行格式是Git推荐的格式(请参阅the documentation of git commit中的讨论)。最简单的方法是使用git commit而不是-m,并在文本编辑器中编写消息。

答案 4 :(得分:3)

尝试以编程方式执行此操作时,您可以使用stdin

,而不是使用临时文件

git commit -F-

然后将消息写入stdin

答案 5 :(得分:0)

我需要一个bash脚本为我执行多行git提交,因此我想到了以下两个选项:

  1. 写入一个临时文件,然后将该文件的内容作为消息提交:

    printf "first line\nsecond line\nthird line" > "file.txt"
    git commit -F "file.txt"
    
  2. (我的首选方法):写入一个临时变量,然后将该变量的内容作为消息提交。请注意,在执行任何命令以调用变量内容时,$MSG周围的引号是必需的! 。如果没有它们,您将失去换行符。

    MSG="$(printf "first line\nsecond line\nthird line")"
    git commit -m "$MSG"
    

    作为第二种方法的扩展,如果您需要编写脚本以多个片段或步骤构建消息,也可以这样做。不过要当心!请注意我在哪里放置换行符(\n)。我不会将它们放在任何printf字符串的末尾。那是因为如果我这样做,他们会get gobbled up,因为bash会自动删除任何 trailing 换行符,因为那样愚蠢。因此,改为这样做,效果很好:

    MSG="$(printf "first line")"
    MSG="$(printf "${MSG}\nsecond line")"
    MSG="$(printf "${MSG}\nthird line")"
    git commit -m "$MSG"
    

上述git log中任何一个的样本git commit输出:

commit e1983659c6ae2e9d2eb4332657329837582fc32b (HEAD -> master)
Author: Gabriel Staples <email@gmail.com>
Date:   Tue Mar 24 00:55:31 2020 -0700

    first line
    second line
    third line

参考文献:

  1. Unix & Linux: "Why does shell Command Substitution gobble up a trailing newline char?"
  2. 非常有用! ==> How can I have a newline in a string in sh? <==