如何使用主题行和邮件正文进行git提交?

wea*_*ide 8 git commit

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

我习惯做:

git commit -am "message here"
Run Code Online (Sandbox Code Playgroud)

但据我了解更久的提交,我应该使用像vim这样的编辑器(在我的mac上)

axi*_*iac 18

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

(git commit -a是一个快捷方式git add .; git commit)

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

如果您希望从单个命令执行所有操作(或者您编写需要调用的脚本git commit并且这种交互提交方式不是一个选项),那么您可以使用该-m参数两次提供提交主题和提交消息正文:

git commit -m "this is the subject" -m "this is the body"
Run Code Online (Sandbox Code Playgroud)

-m在命令行中多次使用将消息连接为单独的段落(用空行分隔).这完全可以将主题作为第一个参数-m和消息体作为第二个参数-m.

没有简单的方法在提交消息体中嵌入换行符.使用三次或更多次-m选项将产生一个包含空行的提交消息,这可能不是你想要的.

如果您正在使用Linux或者macOS您选择的shell是bash有一种丑陋但有效的方法来编写包含新行的消息体.将每一行嵌入quotes(")中以允许它们包含空格并连接行,$'\n'这些行是bash在命令行(或脚本)中编写特殊字符的方式.

该命令如下所示:

git commit -m "the subject" -m "the first line"$'\n'"the second line"$'\n'"the third line"
Run Code Online (Sandbox Code Playgroud)

  • 在sh/bash中,有一种可能不那么丑陋(但有点容易出错)的方式来嵌入换行符:只是故意不能关闭引号,就像`git commit -m subject -m"first line`.当你进入这个命令,shell从提示#1(通常以`$`结尾的那个)切换到提示#2(通常以`>`结尾)并且你可以继续输入.只有一个双引号的行终止输入,所以你可以输入:"第二行",然后是"第三行".我并不特别推荐*这个,只是提供它作为`$'\n'`语法的替代品. (4认同)

rod*_*ode 5

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