关于bash:从命令行向’git commit -m’添加换行符
bashgitshell
Add line break to 'git commit -m' from the command line
我从命令行使用Git,并尝试在提交消息中添加换行符(使用git commit -m"")而不进入Vim。
这可能吗?
相关讨论
- 作为一个注释,这里有一个链接,它总结了良好的提交消息约定 - github.com/erlang/otp/wiki/Writing-good-commit-messages,如果它可以帮助某人。
- 像GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -e之类的东西可以帮助你避免vim。
当然,它是如何完成的取决于你的shell。在Bash中,您可以在消息周围使用单引号,并且可以保持报价打开,这将使Bash提示另一行,直到您关闭报价。像这样:
1 2 3 4 |
git commit -m 'Message
goes here' |
或者,您可以使用"here document"(也称为heredoc):
1 2 3 4 5 6 |
git commit -F- < Message
goes here EOF |
相关讨论
- @Peter Farmer后来的回答提到Git约定显然是这样的:1行汇总,两行换行,然后是详细信息。
- 另外,请参阅@esse下面的帖子。一个简单的回车就可以了。
- 确切地说,请看@esse的这篇文章。
- "here document"在其他不需要(不能)创建临时文件的上下文中非常方便。
- 在Windows 7上没有为我工作
- @MohamadAli,在Windows上,命令行解析的工作方式不同
- 我在这里试图了解如何在不点击编辑器的情况下修改提交消息。我的食谱:
- 双引号也会起作用吗?
- @KelvinShadewing,是的,但不同的是,shell替换规则适用于消息,因此您需要转义美元符号和其他元字符。另一方面,它允许您使用变量。
- @SimonRichter在Windows命令行解析工作方式不同,但仍然使用git commit -m"Hello^ World"不起作用。输入将以2行给出,但在执行git log时,您将只看到一行。
- @SimonRichter -F后的-表示什么?
- @Nikhil,许多程序支持单个破折号作为文件名来表示stdin或stdout。使用here文档,git命令可以从stdin读取消息文本,-F选项提供文件名以从中读取消息。
- 就像一个注释:第一种方法也适用于PowerShell(使用5.1版,Windows 10,桌面测试) - 同时使用单引号和双引号。如果有疑问,可以使用echo"line a [return] line b" [return]测试此行为,然后再在git commit中使用它。
如果你只想要一条头条和一条内容,你可以使用:
1 |
git commit -m"My head line" -m"My content line." |
相关讨论
- 使用gitk时,这显示为单独的消息,但感谢它确实有效。
- 这有利于在Windows上工作,其中引用其他地方提到的技巧不起作用。每行分开-m。太好了!
- 使用此方法创建的消息在GitHub,GitHub for Windows和TortoiseGit上正确显示。
- @ddotsenko这是在Linux / Mac上工作的好处,我们有一个像样的shell =)
- 从man git commit: - m , - message = 使用给定的作为提交消息。如果给出多个-m选项,则它们的值将作为单独的段落连接。
- 与其他建议不同,在Windows上运行!您可以添加空白行,如-m""(需要引号)
- 这是跨平台单行多行提交消息的真正答案!
- 请注意,这会创建单独的段落 - 而不是行。因此每两条-m行之间会有一个空行。
- 这完全适用于Windows CMD!太好了!
- 请注意,如果您在Windows上使用Bash,以前基于Bash的解决方案就足以满足该终端环境的要求。
- 此方法也适用于编辑提交消息:git commit --amend -m"My head line, updated" -m"My content line, updated." +1
- 只是为了澄清任何可能误解@ Ohad-Schneider的大量赞成评论的人 - 根据共同惯例,单独的"段落"是理想的行为。
使用Bash命令行中的Git,您可以执行以下操作:
1 2 3 4 |
git commit -m"this is > a line > with new lines > maybe" |
只需键入并按Enter,如果需要新行,">"符号表示您已按下Enter,并且有一个新行。其他答案也有效。
相关讨论
- Abizern的回答为我澄清了为什么这样做--Bash shell将Enter按键解释为新行,直到第一个双引号字符为'closed'(后续双引号字符)。
- 我必须同意,这是一个更有效,更容易和实用的解决方案,是接受的答案。使用Git 1.8.2.1对我很有用。来自我的+1。
- 在zshell中不起作用
- 这不是Enter键的特殊功能,而是与引号相关。无论你使用双引号还是单引号都没关系,除了变量扩展和转义特殊字符 - 这就是我在答案中选择单引号的原因。
- 不要在zsh中使用它!终端将关闭,您输入的内容将丢失。
- 适用于Windows的Gitbash。
- 如何进入第一行提交。
- 如何回到上一行?
- 与我一起使用zsh!
你应该可以使用
1 2 |
git commit -m $'first line second line' |
从Bash手册:
Words of the form $'string' are treated specially. The word expands to
string, with backslash-escaped characters replaced as specified by the
ANSI C standard.
这包括对上述新行的支持,以及十六进制和Unicode代码等。转到链接部分以查看反斜杠转义字符的列表。
相关讨论
- 不适合我:/
- @rsy:你用的是什么版本的Bash?当你做echo $'one
two'时你看到了什么?
- rsy $ bash --version GNU bash,版本3.2.53(1)-release(x86_64-apple-darwin13)版权所有(C)2007 Free Software Foundation,Inc。正如预期的那样,该命令的输出以两种不同的方式显示行!
- 对于我在Windows 7上它是最好的选择谢谢
- $是关键,我最初没有注意到它。否则我只是在我的消息中间得到一个 n。
- @ChrisBob:谢谢你指出错过这么容易。我更新了我的答案来解释它并包含文档的链接。
- 您甚至不必对整个字符串使用$'...';在换行符周围使用它将起作用:git commit -m"first line"$'
'"second line"。请注意,在开始$'string'之前必须先关闭上一个字符串。
- @PlasmaBinturong:这是真的,但对我来说它看起来更麻烦,更容易错过确保所有额外的引号匹配。
在Git提交中添加换行符
请尝试以下操作以创建多行提交消息:
1 2 3 4 5 |
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." |
然后验证你做了什么:
你应该得到这样的东西:
截图来自我使用PowerShell和Poshgit设置的示例。
相关讨论
- 很棒的答案。我多年来一直在寻找这个,并尝试了许多不同的方式来格式化我的Git提交消息,但这是最好的。我可以通过Git 1.8.2.1确认它是否有效。
- 在Powershell中你可以做换行
- 它在Git Bash for Windows中对我有很大帮助。
- 这应该是选择的答案,因为它是最兼容的方法,这不依赖于任何特定的CLI提示,就像其他一些建议一样。
- 这是一个更好的答案,应该选择作为答案。这不仅作为默认行为排成一行,而且提供了更清晰的提交消息,但是使用多个-m也更灵活。即使它看起来特定于Windows并吸引了与Windows相关的评论,它在Linux中也可以正常工作。
做点什么
1 2 |
git commit -m"test test" |
不起作用,但有点像
1 2 |
git commit -m"$(echo -e"test test")" |
有效,但不是很漂亮。在PATH中设置git-commitlb命令,它执行以下操作:
1 2 3 4 5 |
#!/bin/bash
message=$1
git commit -m"$(echo -e"$message")" |
并像这样使用它:
1 2 3 |
git commitlb"line1 line2 line3" |
警告的话,我有一种感觉,即一般惯例是将摘要行作为第一行,然后是两个换行符,然后是提交消息中的扩展消息,因此这样做会破坏该约定。你当然可以这样做:
1 2 3 4 |
git commitlb"line1
line2 line3" |
相关讨论
从Git文档:
-m
--message=
Use the given as the commit message. If multiple -m options are given, their values are concatenated as separate paragraphs.
所以,如果你正在寻找分组多个提交消息,这应该做的工作:
1 |
git commit -m"commit message1" -m"commit message2" |
相关讨论
- 不可知解决方案(与shell无关)。谢谢你。我们需要RTFM :)
我希望这不会过于远离发布的问题,而是设置默认编辑器然后使用
可能会更舒服。
相关讨论
- 这个应该是最好的anwser。
- 你可以放弃-e,它仍然会打开编辑器
- 这个是我正在寻找的答案。
没有必要使这些东西复杂化。在-m"text...之后,按Enter获取下一行。按下Enter时出现>。完成后,只需输入"并按Enter:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ 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 ... |
相关讨论
- 这个答案没有得到足够的爱!
- 这是一个很好的答案,新的线条在Github上正确显示。第一行显示为标题。
我在Mac上使用zsh,我可以在双引号(")中发布多行提交消息。基本上我一直在键入并按回新行,但是在我关闭引号并返回之前,消息不会发送到Git 。
相关讨论
在Bash / Zsh中,您只需在引号内使用文字换行符:
1 2 3 |
git commit -m 'Multi-line commit message' |
ANSI-C引用也适用于Bash / Zsh:
git commit -m $'Multi-line
commit
message'
您还可以指示Git使用您选择的编辑器来编辑提交消息。从git-commit上的文档:
The editor used to edit the commit log message will be chosen from the
GIT_EDITOR environment variable, the core.editor configuration
variable, the VISUAL environment variable, or the EDITOR
environment variable (in that order). See git-var for details.
如果您正在使用Bash,请点击C-x C-e(Ctrl + x Ctrl + e),它将在您首选的编辑器中打开当前命令。
您可以通过调整VISUAL和EDITOR来更改首选编辑器。
这就是我在.bashrc中所拥有的:
1 2 3 4 |
export ALTERNATE_EDITOR='' export EDITOR='emacsclient -t' export VISUAL='emacsclient -c' export SUDO_EDITOR='emacsclient -t' |
相关讨论
- 那么为什么有人为此投票呢?这是在bash中使用多行命令的最方便的方法,您只需将其配置一次即可。我一直在使用其他答案中显示的其他愚蠢的建议,但是一旦你学会在你喜欢的文本编辑器中编辑命令,就没有办法了。
- 这真是令人心碎的有用,我简直无法相信我过去的岁月没有这个。
就个人而言,我发现在vi(或者你选择的git编辑器)之后修改提交消息最??简单,而不是在命令行上,通过在git commit之后执行git commit --amend。
相关讨论
- 您可以实现相同的结果,而无需仅使用git commit -e进行修改。
- 或者只是git commit,它将打开一个带有提交消息模板的编辑器。
可悲的是,git似乎不允许在其消息中添加任何换行符。 上面已经有各种合理的解决方案,但是当编写脚本时,这些解决方案很烦人。 这里的文档也可以工作,但也可能有点太讨厌处理(想想yaml文件)
这是我做的:
1 2 3 |
git commit \ --message"Subject" \ --message"First line$(echo)Second line$(echo)Third Line" |
虽然这仍然是丑陋的,但它允许"单行",这可能仍然有用。 由于通常字符串是变量或与变量组合,因此可以将uglynes保持在最小值。
以下是Windows上带有标准cmd.exe shell的失败解决方案列表(为了节省一些试错时间!):
-
git commit -m 'Hello Enter不起作用:它不会要求换行
-
git commit -m"Hello Enter同上
-
git commit -m"Hello^ Enter同上
-
git commit -m 'Hello^ Enter World'看起来像是在工作,因为它问"更多?"并允许写一个新行,但最后在做git log时你会看到它仍然是一行的消息......
TL; DR:即使在Windows上,命令行解析的工作方式也不同,而^允许多行输入,这在这里没有帮助。
最后git commit -e可能是最好的选择。