我在命令行中使用Git,并尝试在提交消息中添加换行符(使用git commit -m ""
)而不进入Vim。
这可能吗?
答案 0 :(得分:573)
当然,它是如何完成取决于你的shell。在Bash中,您可以在消息周围使用单引号,并且可以保持报价打开,这将使Bash提示另一行,直到您关闭报价。像这样:
git commit -m 'Message
goes
here'
或者,您可以使用“此处文档”:
git commit -F- <<EOF
Message
goes
here
EOF
答案 1 :(得分:399)
如果您只想要一条头条和一条内容,您可以使用:
git commit -m "My head line" -m "My content line."
答案 2 :(得分:377)
在Bash的命令行中使用Git,您可以执行以下操作:
git commit -m "this is
> a line
> with new lines
> maybe"
只需输入并按 Enter 即可获得新行“&gt;”符号表示您已按 Enter ,并且有一个新行。其他答案也有效。
答案 3 :(得分:90)
你应该可以使用
git commit -m $'first line\nsecond line'
来自Bash manual:
特殊处理$' string '形式的单词。这个词扩展到了 string ,替换为反斜杠转义字符 ANSI C标准。
这包括对上述新行的支持,以及十六进制和Unicode代码等。转到链接部分以查看反斜杠转义字符的列表。
答案 4 :(得分:83)
在Git提交中添加换行符
尝试以下操作来创建多行提交消息:
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."
然后验证你做了什么:
git log -1
你应该得到这样的东西:
截图来自我使用PowerShell和Poshgit设置的示例。
答案 5 :(得分:40)
做类似
的事情git commit -m"test\ntest"
不起作用,但
之类的东西git commit -m"$(echo -e "test\ntest")"
有效,但不是很漂亮。您在git-commitlb
中设置了PATH
命令,其中包含以下内容:
#!/bin/bash
message=$1
git commit -m"$(echo -e "$message")"
并像这样使用它:
git commitlb "line1\nline2\nline3"
警告的话,我有一种感觉,即一般约定是将摘要行作为第一行,然后是两个换行符,然后是提交消息中的扩展消息,所以做这样的事情会打破这个惯例。你当然可以这样做:
git commitlb "line1\n\nline2\nline3"
答案 6 :(得分:34)
答案 7 :(得分:28)
-m&lt; msg&gt;
--message = LT; MSG&GT;
使用给定的&lt; msg&gt;作为提交消息。如果给出了多个NSScrollView *scrollView = [[NSScrollView alloc] initWithFrame:NSZeroRect]; _collectionView = [[NSCollectionView alloc] initWithFrame:NSZeroRect]; scrollView.documentView = _collectionView; [self.view addSubview:scrollView];
选项,则将它们的值连接为单独的段落。
因此,如果您正在寻找分组多个提交消息,那么应该完成这项工作:
-m
答案 8 :(得分:19)
我在Mac上使用zsh,我可以在双引号(“)中发布多行提交消息。基本上我一直在键入并按回新行,但是在我关闭之前不会将消息发送给Git引用并返回。
答案 9 :(得分:18)
没有必要使这些东西复杂化。通过按 Enter 获取-m "text...
下一行后。按下 Enter 时,会出现>
。完成后,只需输入"
并按 Enter :
$ 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 ...
答案 10 :(得分:7)
在Bash / Zsh中,您只需在引号内使用文字换行符:
git commit -m 'Multi-line
commit
message'
ANSI-C quoting也适用于Bash / Zsh:
git commit -m $'Multi-line\ncommit\nmessage'
您还可以指示Git使用其他编辑器。来自git-commit上的文档:
用于编辑提交日志消息的编辑器将从中选择
GIT_EDITOR
环境变量,core.editor
配置 变量,VISUAL
环境变量或EDITOR
环境变量(按此顺序)。有关详细信息,请参阅git-var。
答案 11 :(得分:6)
如果您使用的是Bash,请点击C-x C-e
( Ctrl + x Ctrl + e ),它将在您首选的编辑器中打开当前命令。
您可以通过调整VISUAL
和EDITOR
来更改首选编辑器。
这就是我.bashrc
中的内容:
export ALTERNATE_EDITOR=''
export EDITOR='emacsclient -t'
export VISUAL='emacsclient -c'
export SUDO_EDITOR='emacsclient -t'
答案 12 :(得分:5)
就我个人而言,我发现最简单的方法是在vi
(或者你选择的git编辑器)之后修改提交消息,而不是在命令行上修改,git commit --amend
在{git commit
之后1}}。
答案 13 :(得分:2)
我看不到有人提到如果您不提供消息,它将为您打开nano(至少在Linux中是这样),您可以在其中编写多行代码...
只需要这样做:
git commit
答案 14 :(得分:1)
以下是带有标准cmd.exe shell的Windows上失败解决方案的列表(为您节省了一些反复试验的时间!):
git commit -m 'Hello
输入不起作用:它不会要求换行
git commit -m "Hello
输入 idem
git commit -m "Hello^
输入 idem
git commit -m 'Hello^
输入 World'
似乎可以正常工作,因为它询问“更多?” 并允许写新行,但是最后,在进行git log
时,您会看到它仍然是单行消息...
TL; DR:即使在Windows上,命令行解析也可以differently,并且^
允许多行输入,但这在这里无济于事。
最后,git commit -e
可能是最好的选择。
答案 15 :(得分:0)
可悲的是,git似乎在其消息中不允许使用任何换行符。上面已经有各种合理的解决方案,但是在编写脚本时,这些解决方案很烦人。这里的文档也可以使用,但是可能也太烦人了(想想yaml文件)
这是我所做的:
git commit \
--message "Subject" \
--message "First line$(echo)Second line$(echo)Third Line"
虽然这仍然很丑陋,但它允许使用“单线”,这可能仍然有用。通常情况下,字符串是变量或与变量组合在一起,因此可以将丑陋程度降至最低。
答案 16 :(得分:0)
IMO,最初的提交消息行应该很短,而不是段落。所以使用
git commit -m "<short_message>"
足够
之后,为了扩展初始提交消息,我们可以使用
git commit --amend
这将打开vim,然后我们可以输入提交消息的说明,我认为这比命令行更容易。