關(guān)于bash:從命令行向’git commit -m’添加換行符
bashgitshell
Add line break to 'git commit -m' from the command line
我從命令行使用Git,并嘗試在提交消息中添加換行符(使用git commit -m"")而不進(jìn)入Vim。
這可能嗎?
?相關(guān)討論
- 作為一個注釋,這里有一個鏈接,它總結(jié)了良好的提交消息約定 - github.com/erlang/otp/wiki/Writing-good-commit-messages,如果它可以幫助某人。
- 像GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -e之類的東西可以幫助你避免vim。
當(dāng)然,它是如何完成的取決于你的shell。在Bash中,您可以在消息周圍使用單引號,并且可以保持報價打開,這將使Bash提示另一行,直到您關(guān)閉報價。像這樣:
1 |
git commit?-m?'Message |
或者,您可以使用"here document"(也稱為heredoc):
1 |
git commit?-F-?<<EOF |
?相關(guān)討論
- @Peter Farmer后來的回答提到Git約定顯然是這樣的:1行匯總,兩行換行,然后是詳細(xì)信息。
- 另外,請參閱@esse下面的帖子。一個簡單的回車就可以了。
- 確切地說,請看@esse的這篇文章。
- "here document"在其他不需要(不能)創(chuàng)建臨時文件的上下文中非常方便。
- 在Windows 7上沒有為我工作
- @MohamadAli,在Windows上,命令行解析的工作方式不同
- 我在這里試圖了解如何在不點擊編輯器的情況下修改提交消息。我的食譜:
- 雙引號也會起作用嗎?
- @KelvinShadewing,是的,但不同的是,shell替換規(guī)則適用于消息,因此您需要轉(zhuǎn)義美元符號和其他元字符。另一方面,它允許您使用變量。
- @SimonRichter在Windows命令行解析工作方式不同,但仍然使用git commit -m"Hello^?World"不起作用。輸入將以2行給出,但在執(zhí)行g(shù)it log時,您將只看到一行。
- @SimonRichter?-F后的-表示什么?
- @Nikhil,許多程序支持單個破折號作為文件名來表示stdin或stdout。使用here文檔,git命令可以從stdin讀取消息文本,-F選項提供文件名以從中讀取消息。
- 就像一個注釋:第一種方法也適用于PowerShell(使用5.1版,Windows 10,桌面測試) - 同時使用單引號和雙引號。如果有疑問,可以使用echo"line a?[return]?line b"?[return]測試此行為,然后再在git commit中使用它。
如果你只想要一條頭條和一條內(nèi)容,你可以使用:
1 |
git commit?-m"My head line"?-m"My content line." |
?相關(guān)討論
- 使用gitk時,這顯示為單獨的消息,但感謝它確實有效。
- 這有利于在Windows上工作,其中引用其他地方提到的技巧不起作用。每行分開-m。太好了!
- 使用此方法創(chuàng)建的消息在GitHub,GitHub for Windows和TortoiseGit上正確顯示。
- @ddotsenko這是在Linux / Mac上工作的好處,我們有一個像樣的shell =)
- 從man git commit: - m?, - message =?使用給定的作為提交消息。如果給出多個-m選項,則它們的值將作為單獨的段落連接。
- 與其他建議不同,在Windows上運(yùn)行!您可以添加空白行,如-m""(需要引號)
- 這是跨平臺單行多行提交消息的真正答案!
- 請注意,這會創(chuàng)建單獨的段落 - 而不是行。因此每兩條-m行之間會有一個空行。
- 這完全適用于Windows CMD!太好了!
- 請注意,如果您在Windows上使用Bash,以前基于Bash的解決方案就足以滿足該終端環(huán)境的要求。
- 此方法也適用于編輯提交消息:git commit --amend -m"My head line, updated" -m"My content line, updated."?+1
- 只是為了澄清任何可能誤解@ Ohad-Schneider的大量贊成評論的人 - 根據(jù)共同慣例,單獨的"段落"是理想的行為。
使用Bash命令行中的Git,您可以執(zhí)行以下操作:
1 |
git commit?-m"this is |
只需鍵入并按Enter,如果需要新行,">"符號表示您已按下Enter,并且有一個新行。其他答案也有效。
?相關(guān)討論
- Abizern的回答為我澄清了為什么這樣做--Bash shell將Enter按鍵解釋為新行,直到第一個雙引號字符為'closed'(后續(xù)雙引號字符)。
- 我必須同意,這是一個更有效,更容易和實用的解決方案,是接受的答案。使用Git 1.8.2.1對我很有用。來自我的+1。
- 在zshell中不起作用
- 這不是Enter鍵的特殊功能,而是與引號相關(guān)。無論你使用雙引號還是單引號都沒關(guān)系,除了變量擴(kuò)展和轉(zhuǎn)義特殊字符 - 這就是我在答案中選擇單引號的原因。
- 不要在zsh中使用它!終端將關(guān)閉,您輸入的內(nèi)容將丟失。
- 適用于Windows的Gitbash。
- 如何進(jìn)入第一行提交。
- 如何回到上一行?
- 與我一起使用zsh!
你應(yīng)該可以使用
1 |
git commit?-m?$'first 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.
這包括對上述新行的支持,以及十六進(jìn)制和Unicode代碼等。轉(zhuǎn)到鏈接部分以查看反斜杠轉(zhuǎn)義字符的列表。
?相關(guān)討論
- 不適合我:/
- @rsy:你用的是什么版本的Bash?當(dāng)你做echo $'one
two'時你看到了什么? - rsy $ bash --version GNU bash,版本3.2.53(1)-release(x86_64-apple-darwin13)版權(quán)所有(C)2007 Free Software Foundation,Inc。正如預(yù)期的那樣,該命令的輸出以兩種不同的方式顯示行!
- 對于我在Windows 7上它是最好的選擇謝謝
- $是關(guān)鍵,我最初沒有注意到它。否則我只是在我的消息中間得到一個 n。
- @ChrisBob:謝謝你指出錯過這么容易。我更新了我的答案來解釋它并包含文檔的鏈接。
- 您甚至不必對整個字符串使用$'...';在換行符周圍使用它將起作用:git commit -m"first line"$'
'"second line"。請注意,在開始$'string'之前必須先關(guān)閉上一個字符串。 - @PlasmaBinturong:這是真的,但對我來說它看起來更麻煩,更容易錯過確保所有額外的引號匹配。
在Git提交中添加換行符
請嘗試以下操作以創(chuàng)建多行提交消息:
1 |
git commit?-m"Demonstrate multi-line commit message in Powershell"?-m"Add a title to your commit after -m enclosed in quotes, |
然后驗證你做了什么:
1 |
git log?-1 |
你應(yīng)該得到這樣的東西:
截圖來自我使用PowerShell和Poshgit設(shè)置的示例。
?相關(guān)討論
- 很棒的答案。我多年來一直在尋找這個,并嘗試了許多不同的方式來格式化我的Git提交消息,但這是最好的。我可以通過Git 1.8.2.1確認(rèn)它是否有效。
- 在Powershell中你可以做換行
- 它在Git Bash for Windows中對我有很大幫助。
- 這應(yīng)該是選擇的答案,因為它是最兼容的方法,這不依賴于任何特定的CLI提示,就像其他一些建議一樣。
- 這是一個更好的答案,應(yīng)該選擇作為答案。這不僅作為默認(rèn)行為排成一行,而且提供了更清晰的提交消息,但是使用多個-m也更靈活。即使它看起來特定于Windows并吸引了與Windows相關(guān)的評論,它在Linux中也可以正常工作。
做點什么
1 |
git commit?-m"test |
不起作用,但有點像
1 |
git commit?-m"$(echo -e"test |
有效,但不是很漂亮。在PATH中設(shè)置git-commitlb命令,它執(zhí)行以下操作:
1 |
#!/bin/bash |
并像這樣使用它:
1 |
git?commitlb"line1 |
警告的話,我有一種感覺,即一般慣例是將摘要行作為第一行,然后是兩個換行符,然后是提交消息中的擴(kuò)展消息,因此這樣做會破壞該約定。你當(dāng)然可以這樣做:
1 |
git?commitlb"line1 |
?相關(guān)討論
- +1這是讓我沿著這條路走下去的一般慣例。謝謝
從Git文檔:
-m
--message=
Use the given?as the commit message. If multiple?-m?options are given, their values are concatenated as separate paragraphs.
所以,如果你正在尋找分組多個提交消息,這應(yīng)該做的工作:
1 |
git commit?-m"commit message1"?-m"commit message2" |
?相關(guān)討論
- 不可知解決方案(與shell無關(guān))。謝謝你。我們需要RTFM :)
我希望這不會過于遠(yuǎn)離發(fā)布的問題,而是設(shè)置默認(rèn)編輯器然后使用
1 |
git commit?-e |
可能會更舒服。
?相關(guān)討論
- 這個應(yīng)該是最好的anwser。
- 你可以放棄-e,它仍然會打開編輯器
- 這個是我正在尋找的答案。
沒有必要使這些東西復(fù)雜化。在-m"text...之后,按Enter獲取下一行。按下Enter時出現(xiàn)>。完成后,只需輸入"并按Enter:
1 |
$?git commit?-m"Another way of demonstrating multicommit messages: |
?相關(guān)討論
- 這個答案沒有得到足夠的愛!
- 這是一個很好的答案,新的線條在Github上正確顯示。第一行顯示為標(biāo)題。
我在Mac上使用zsh,我可以在雙引號(")中發(fā)布多行提交消息?;旧衔乙恢痹阪I入并按回新行,但是在我關(guān)閉引號并返回之前,消息不會發(fā)送到Git 。
?相關(guān)討論
- 你可以在bash中做同樣的事情。
在Bash / Zsh中,您只需在引號內(nèi)使用文字換行符:
1 |
git commit?-m?'Multi-line |
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),它將在您首選的編輯器中打開當(dāng)前命令。
您可以通過調(diào)整VISUAL和EDITOR來更改首選編輯器。
這就是我在.bashrc中所擁有的:
1 |
export?ALTERNATE_EDITOR='' |
?相關(guān)討論
- 那么為什么有人為此投票呢?這是在bash中使用多行命令的最方便的方法,您只需將其配置一次即可。我一直在使用其他答案中顯示的其他愚蠢的建議,但是一旦你學(xué)會在你喜歡的文本編輯器中編輯命令,就沒有辦法了。
- 這真是令人心碎的有用,我簡直無法相信我過去的歲月沒有這個。
就個人而言,我發(fā)現(xiàn)在vi(或者你選擇的git編輯器)之后修改提交消息最??簡單,而不是在命令行上,通過在git commit之后執(zhí)行g(shù)it commit --amend。
?相關(guān)討論
- 您可以實現(xiàn)相同的結(jié)果,而無需僅使用git commit -e進(jìn)行修改。
- 或者只是git commit,它將打開一個帶有提交消息模板的編輯器。
可悲的是,git似乎不允許在其消息中添加任何換行符。 上面已經(jīng)有各種合理的解決方案,但是當(dāng)編寫腳本時,這些解決方案很煩人。 這里的文檔也可以工作,但也可能有點太討厭處理(想想yaml文件)
這是我做的:
1 |
git commit?\ |
雖然這仍然是丑陋的,但它允許"單行",這可能仍然有用。 由于通常字符串是變量或與變量組合,因此可以將uglynes保持在最小值。
以下是Windows上帶有標(biāo)準(zhǔn)cmd.exe shell的失敗解決方案列表(為了節(jié)省一些試錯時間!):
-
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可能是最好的選擇。文章來源:http://www.zghlxwxcb.cn/news/detail-645391.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-645391.html
到了這里,關(guān)于從命令行向’git commit -m’添加換行符------轉(zhuǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!