使用"标准输入模式" for Git Bash for Windows中的`git commit -F -`?

时间:2016-09-01 02:51:13

标签: git git-bash git-commit

我理解以下命令从标准输入获取文本并将其用作提交日志的消息:

echo "hello world" | git commit -F -

但是,如果你只是将它作为git commit -F -那么它会带你到我所说的#34;标准输入模式" Git Bash显示消息(reading log message from standard input)并等待某种输入......我猜。我的问题是这种模式到底是什么,可以使用吗?我已经使用ctrl-zctrl-c输入了文本并退出了,但是之后没有成功提交成功的运气。它会让我回到提示符。

问题:"标准输入模式"实际发生了什么?是否可以用它来成功输入提交日志消息?

编辑:我已经尝试了ctrl-d,但没有任何变化。我使用的是Windows 10。

3 个答案:

答案 0 :(得分:4)

  

使用 - in命令时,它告诉应用程序从STDIN读取。 Git注意到STDIN是空的(除非你先回显和管道)所以它开始监听输入。输入信息后,您必须通过发送EOF信息告诉您已完成信息。

     

当你运行echo hello |时git commit -F - 你将文本传递给git所以它使用了管道消息。

     

blockloop

要在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 .