我理解以下命令从标准输入获取文本并将其用作提交日志的消息:
echo "hello world" | git commit -F -
但是,如果你只是将它作为git commit -F -
那么它会带你到我所说的#34;标准输入模式" Git Bash显示消息(reading log message from standard input)
并等待某种输入......我猜。我的问题是这种模式到底是什么,可以使用吗?我已经使用ctrl-z
和ctrl-c
输入了文本并退出了,但是之后没有成功提交成功的运气。它会让我回到提示符。
问题:"标准输入模式"实际发生了什么?是否可以用它来成功输入提交日志消息?
编辑:我已经尝试了ctrl-d
,但没有任何变化。我使用的是Windows 10。
答案 0 :(得分:4)
使用 - in命令时,它告诉应用程序从STDIN读取。 Git注意到STDIN是空的(除非你先回显和管道)所以它开始监听输入。输入信息后,您必须通过发送EOF信息告诉您已完成信息。
当你运行echo hello |时git commit -F - 你将文本传递给git所以它使用了管道消息。
要在Git Bash控制台中的Windows上使用git commit -F -
,您必须将命令附加到winpty
,如下所示:
winpty git commit -F -
之后,您将进入"标准输入模式"正如所料。而不是像使用Linux和Mac那样使用 CTRL + D ,按 CTRL + Z 并且然后在新行上 ENTER 。这将指示EOF并保存提交日志消息。
如果您在与消息相同的行上按 CTRL + Z ,则^Z
将作为消息旁边的文本输入,其他任何内容都不会发生。你需要在一个单独的空行上按 CTRL + Z 然后按 ENTER 。
所以,编辑blockloop的例子:
winpty git commit -F -
my message blah blah<enter>
<CTRL-Z><enter>
来源:Github
答案 1 :(得分:2)
输入信息后使用CTRL-D(EOF)。 CTRL-C终止,CTRL-Z暂停。 EOF告诉STDIN您的消息已完成。
git commit -F -
my message blah blah<enter>
<CTRL-D>
在命令中使用-
时,它会告诉应用程序从STDIN读取。 Git注意到STDIN是空的(除非你先回显和管道)所以它开始监听输入。输入邮件后,您必须通过发送EOF
邮件告诉您已完成邮件。 EOF
的关键组合是CTRL-D
当您运行echo hello | git commit -F -
时,您将文本传输到git,以便它使用管道消息。
出于好奇,为什么不使用git commit -m 'your message here'
?
答案 2 :(得分:0)
You can try SHIFT+esc , and after insert q and press Enter .