从命令行向’git commit -m’添加换行符------转

关于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."

然后验证你做了什么:

1

git log -1

你应该得到这样的东西:

从命令行向’git commit -m’添加换行符------转_第1张图片

截图来自我使用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"

 相关讨论

  • +1这是让我沿着这条路走下去的一般惯例。谢谢


从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 :)


我希望这不会过于远离发布的问题,而是设置默认编辑器然后使用

1

git commit -e

可能会更舒服。

 相关讨论

  • 这个应该是最好的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中做同样的事情。


在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可能是最好的选择。

 

你可能感兴趣的:(git,vim,编辑器)