2016-09-01 66 views
1

據我所知,以下命令從標準輸入文本,並使用它作爲提交日誌消息:在Git Bash for Windows中,「git commit -F -`的」標準輸入模式「有什麼用?

echo "hello world" | git commit -F - 

但是,如果你只是把它作爲git commit -F -那麼它給你帶來什麼,我稱之爲「標準輸入模式「,其中Git Bash顯示消息(reading log message from standard input)並等待某種輸入...我想。我的問題是這個模式真的是什麼,它可以被使用嗎?我已輸入文字並使用ctrl-zctrl-c退出,但沒有提交成功後運行的運氣。它只會讓我回到提示。

問題:「標準輸入模式」實際發生了什麼,它可以用來成功輸入提交日誌消息嗎?

編輯:我試過ctrl-d,但沒有任何變化。我正在使用Windows 10.

回答

2

當您使用 - in命令時,它會通知應用程序從STDIN中讀取數據。 Git注意到STDIN是空的(除非你先回聲並管道),所以它開始監聽輸入。一旦你輸入你的信息,你必須通過發送EOF信息告訴你完成了。

當你運行echo hello | git commit -F - 你將文本輸入到git中,所以它使用管道信息。

blockloop

爲了在GIT猛砸控制檯使用git commit -F -在Windows上,必須在命令追加到winpty像這樣:然後

winpty git commit -F -

,你會如預期的那樣被帶到「標準輸入模式」。除了使用CTRL +d,你會與Linux和Mac,按CTRL +的Z然後一個新行 ENTER。這將指示EOF並保存提交日誌消息。

如果按CTRL +在同一行消息ž,然後^Z將作爲文本輸入的消息,並沒有別的接下來會發生到。您需要按CTRL + Z然後ENTER在單獨的空行上。

所以,編輯blockloop的例子:

winpty git commit -F - 
my message blah blah<enter> 
<CTRL-Z><enter> 

來源:Github

+0

感謝您的更新 – blockloop

+0

沒問題!如果解釋中的某些內容沒有意義,請告訴我,我會盡力澄清。 – Dash

1

輸入消息後使用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'

+0

我試過了,但沒有運氣。沒有什麼變化。但是,謝謝闡述! Argh ...我也嘗試過「\ 0」,「\ n」和「\ eof」 – Dash

+0

輸入你的消息後,按回車換行,然後按CTRL-D – blockloop

+0

你使用的是什麼操作系統? – blockloop

0

你可以試試Shift + Esc鍵,後插入q並按Enter鍵。

+0

不幸的是,這也沒有奏效。我很好奇Git的人對此有何評論。 – Dash