【问题标题】:How to do a git commit with a subject line and message body?如何使用主题行和消息正文进行 git 提交?
【发布时间】:2017-03-23 04:26:27
【问题描述】:

我想改进我做 git 提交的方式,我一直在网上阅读。我在http://chris.beams.io/posts/git-commit/ 上关注了该站点,这将我带到https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration,在那里我可以设置我的默认编辑器,但我仍然不明白如何将主题行与提交正文分开编辑。

我已经习惯了:

git commit -am "message here"

但据我了解,对于更长的提交,我应该使用 vim 之类的编辑器(在我的 Mac 上)

【问题讨论】:

  • 这种“主题行”和“正文”的分离是由显示提交消息的客户端完成的。提交信息的第一行通常会成为“主题”。
  • 如何区分第一行和第二行?如何使用编辑器提交?
  • 带有换行符。在文本编辑器中更容易做到。

标签: git commit


【解决方案1】:

最简单的方法是在没有-m 和消息的情况下运行git commit

git commit -agit add .; git commit 的快捷方式)

它将启动一个编辑器,您可以在其中多行输入提交消息。然后保存文件,当编辑器退出时,git commit 继续使用文件中的消息。

如果您更喜欢通过单个命令完成所有操作(或者您编写的脚本需要调用 git commit 并且这种交互式提交方式不是一种选择),那么您可以通过以下方式提供提交主题和提交消息正文using the -m argument two times:

git commit -m "this is the subject" -m "this is the body"

在命令行中多次使用-m 将消息连接为单独的段落(由空行分隔)。这可以完美地提供主题作为第一个 -m 的参数和消息正文作为第二个 -m 的参数。

没有简单的方法可以在提交消息正文中嵌入换行符。使用 -m 选项三次或更多次将生成包含空行的提交消息,这可能不是您想要的。

如果您在LinuxmacOS 上并且您选择的shell 是bash,那么有一种丑陋但可行的方法来编写包含新行的消息正文。将每一行嵌入引号 (") 以允许它们包含空格并用 $'\n' 连接行,这是 bash 在命令行(或脚本)中编写特殊字符的方式。

命令如下所示:

git commit -m "the subject" -m "the first line"$'\n'"the second line"$'\n'"the third line"

【讨论】:

  • 在 sh/bash 中,有一种可能不那么难看(但容易出错)的方式来嵌入换行符:只是故意不关闭引用,如 git commit -m subject -m "first line。当您输入此命令时,shell 从提示符 #1(通常以 $ 结尾)切换到提示符 #2(通常以 > 结尾),您可以继续输入。只有一个双引号的行会终止输入,因此您可以输入:the second line,然后是 the third line"。我不是特别推荐这个,只是提供它作为$'\n'语法的替代品。
  • @torek - 这是一个很好的选择。非常干净实用。谢谢!
  • @torek 非常容易清洁的解决方案。
  • 只是好奇:你能连接 \0x10 [ascii newline] 吗?
  • @clockw0rk \x10 不是新行。您要查找的字符(换行符)是\x0a;与\n相同。
【解决方案2】:

运行:git commit -a,您应该会得到一个 VI 编辑器界面,可以让您输入主题行和消息。输入完文字后按ESC然后:wq

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2011-06-19
    • 1970-01-01
    • 2012-10-10
    相关资源
    最近更新 更多