コマンドラインから「git commit -m」に改行を追加します


746

私はコマンドラインからGitを使用しgit commit -m ""ていて、Vimに入らずにコミットメッセージに改行を追加しようとしています(を使用)。

これは可能ですか?


6
注意として、これは良いコミットメッセージの慣例をまとめたリンクです- 誰かを助けるならgithub.com/erlang/otp/wiki/Writing-good-commit-messages
WeirdElfB0y 2016年

5
のようなものGIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -eがあなたを避けるのに役立ちますvim
jotik

回答:


694

確かに、それがどのように行われるかはあなたのシェルに依存します。Bashでは、メッセージを単一引用符で囲むことができ、引用符を閉じるまで、引用符を開いたままにしておくことができます。このような:

git commit -m 'Message

goes
here'

または、「ヒアドキュメント」(別名ヒアドキュメント)を使用することもできます。

git commit -F- <<EOF
Message

goes
here
EOF

53
@Peter Farmerの回答の後半では、Gitの規則は明らかに次のようなものであると述べています。
Nick Spacek、2011年

4
また、@ esseによる以下の投稿を参照してください。単純なキャリッジリターンでうまくいきます。
Hakan Ensari

6
@ MohamadAli、Windowsではコマンドライン解析の動作が異なります
Simon Richter

2
@KelvinShadewing、そうですが、シェル置換ルールがメッセージに適用されるという違いがあるため、ドル記号やその他のメタ文字をエスケープする必要があります。一方、変数を使用することができます。
Simon Richter

2
@Nikhil、多くのプログラムは、stdinまたはstdoutを意味するファイル名として単一のダッシュをサポートしています。ではここで、文書gitコマンドは標準入力からメッセージテキストを読むことができ、そして-Fオプションからメッセージを読み取るために、ファイル名を与えます。
Simon Richter

514

たとえば、見出し行とコンテンツ行が必要な場合は、次のように使用できます。

git commit -m "My head line" -m "My content line."

これにより、行ではなく個別の段落が作成されることに注意してください。したがって、各2行の間に空白行があります-m。例:

My head line

My content line.

80
これには、他の場所で言及されている引用トリックが機能しないWindowsで作業できるという利点があります。-m行ごとに区切ります。いいね!
ddotsenko 2012

8
このメソッドを使用して作成されたメッセージは、GitHub、GitHub for Windows、およびTortoiseGitで正しく表示されます。
Richard

12
@ddotsenkoこれは、適切なシェルがあるLinux / Macで作業する利点です=)
Ciro Santilli冠状病毒审查六四事件法事件功

7
From man git commit:-m <msg>、--message = <msg>指定された<msg>をコミットメッセージとして使用します。複数の-mオプションを指定すると、それらの値は別々の段落として連結されます。
Amedee Van Gasse、2015年

55
これにより、行ではなく個別の段落が作成されることに注意してください。したがって、各2 -m行の間に空白行があります。
Ohad Schneider

398

BashでコマンドラインからGitを使用すると、次のことができます。

git commit -m "this is
> a line
> with new lines
> maybe"

Enter新しい行が必要なときに入力して押すだけで、「>」記号はを押したことを意味しEnter、新しい行があります。他の答えも機能します。


6
Abizernの回答で、これが機能する理由が明確になりました。Bashシェルは、<kbd> Enter </ kbd>キーの押下を、最初の二重引用符文字が「閉じる」まで(後続の二重引用符文字と共に)新しい行として解釈します。
ケニーエビット2013

1
これは、受け入れられた答えよりもはるかに効果的で、簡単で実用的な解決策であることに同意する必要があります。Git 1.8.2.1を使用している私にとってはうまくいきます。私からの+1。
crmpicco 2013

これはEnterキーの特別な機能ではなく、引用符に関連しています。変数の展開と特殊文字のエスケープを除いて、二重引用符を使用するか単一引用符を使用するかは、実際には重要ではありません。そのため、私の回答では単一引用符を選択しました。
Simon Richter

2
これをzshで使用しないでください!ターミナルが閉じ、入力した内容が失われます。
laike9m

3
Gitbash for Windowsで動作します。
Omar Tariq 2016年

111

使えるはず

git commit -m $'first line\nsecond line'

Bashマニュアルから:

$ ' string ' 形式の単語は特別に扱われます。単語はstringに展開され 、バックスラッシュでエスケープされた文字はANSI C規格の指定に従って置き換えられます。

これには、上記の改行のサポートに加えて、16進コードとUnicodeコードなどが含まれます。リンクされたセクションに移動して、バックスラッシュでエスケープされた文字のリストを確認してください。


@rsy:Bashのどのバージョンを使用していますか?あなたがするときあなたは何を見ますかecho $'one\ntwo'
追って通知があるまで一時停止。

1
rsy $ bash --version GNU bash、バージョン3.2.53(1)-release(x86_64-apple-darwin13)Copyright(C)2007 Free Software Foundation、Inc.そのコマンドの出力は、予想どおり、2つの異なるライン!
ccoutinho

Windows 7での私にとっては、それが最善の選択肢です。ありがとう
Mohamad Ali

2
ここでは$が重要であり、最初は気付かなかった。それ以外の場合は、メッセージの真ん中に\ nが表示されます。
ChrisBob 2017年

1
文字列全体に$ '...'を使用する必要さえありません。これを改行文字の前後で使用すると機能しますgit commit -m "first line"$'\n'"second line"。を開始する前に、前の文字列を閉じる必要があることに注意してください$'string'
PlasmaBinturong

95

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での複数行のGitコミットメッセージ

スクリーンショットは、PowerShellとPoshgitを使用して設定した例のスクリーンショットです。


7
素晴らしい答え。私はこれを何年もの間探し続け、Gitコミットメッセージをフォーマットするためにさまざまな方法を試しましたが、これが最もうまく機能します。Git 1.8.2.1ではプロンプトで動作することを確認できます。
crmpicco 2014


2
それは私のためにGit Bash for Windowsで大いに働きました。
ユリシーズアルベス

1
これは、必要があり、これは他のいくつかの提案を行うようにプロンプト任意の特定のCLIに依存しない、最も互換性のある方法であるとして...選ばれた答えである

1
これはより良い回答であり、回答として選択する必要があります。これはデフォルトの振る舞いとして機能するだけでなく、よりクリーンなコミットメッセージを提供するだけでなく、複数の-mを使用することでやや柔軟になります。また、Windows固有のように見え、Windows関連のコメントを集めていますが、Linuxでも同様に機能します。
0xc0de

44

のようなことをしています

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"

警告の言葉、私は一般的な慣習が最初の行として要約行、次に2つの改行、そしてコミットメッセージ内の拡張メッセージとなるように感じているので、このようなことを行うとその慣例が破られます。もちろんできます:

git commitlb "line1\n\nline2\nline3"

8
+1このルートを見下ろしたのは、その一般的な慣習でした。おかげで
アランWhitelaw

39

Gitのドキュメントから:

-m <msg>
--message = <msg>
指定された<msg>をコミットメッセージとして使用します。複数の-mオプションが指定されている場合、それらの値は個別の段落として連結されます。

したがって、複数のコミットメッセージをグループ化する場合は、次のように機能します。

git commit -m "commit message1" -m "commit message2"

不可知論的ソリューション(シェルに依存しない)。これをありがとう。RTFMが必要です:)
Mat M


28

物事を複雑にする必要はありません。を-m "text...押して次の行を取得した後Enter。ときに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 ...

1
この答えは十分な愛を得ていません!
cBlaine

1
これは素晴らしい答えです。新しい行がGithubに正しく表示されます。最初の行は見出しとして表示されます。
Yogesh Umesh Vaity

18

Macではzshを使用しており、複数行のコミットメッセージを二重引用符( ")で囲んで投稿できます。基本的に、改行を入力してReturnキーを押し続けますが、引用符を閉じて戻るまでメッセージはGitに送信されません。


7
bashでも同じことができます。
Peter Farmer、

17

Bash / Zshでは、引用符内でリテラルの改行を使用できます。

git commit -m 'Multi-line
commit
message'

ANSI-Cの引用はBash / Zshでも機能します。

git commit -m $'Multi-line\ncommit\nmessage'

また、任意のエディターを使用してコミットメッセージを編集するようにGitに指示することもできます。git-commitのドキュメントから:

コミットログメッセージの編集に使用されるエディターは、 GIT_EDITOR環境変数、core.editor構成変数、VISUAL環境変数、またはEDITOR 環境変数から(この順序で)選択されます。詳細はgit-varを参照してください。


5

個人的に、私は事実の後でコミットメッセージを変更するのが最も簡単だと思います viことによって、(または任意選択のあなたのgitのエディタがある)ではなく、コマンドライン上でgit commit --amend右後をgit commit


6
を使用するだけで修正することなく、同じ結果を得ることができgit commit -eます。
Nathan Hinchey 2016年

4
または単にgit commit、そしてそれはコミットメッセージテンプレートでエディタを開きます。
ジムスチュワート

5

Bashを使用している場合は、C-x C-eCtrl+ x Ctrl+e)、現在のコマンドがお好みのエディターで開きます。

VISUALとを調整することで、優先エディターを変更できますEDITOR

それは私が私の中に持っているものです.bashrc

export ALTERNATE_EDITOR=''
export EDITOR='emacsclient -t'
export VISUAL='emacsclient -c'
export SUDO_EDITOR='emacsclient -t'

1
それで、なぜ誰かがこれに反対票を投じたのですか?これは、bashで複数行コマンドを操作する最も便利な方法です。一度設定するだけで済みます。私はここで他の回答に示されている他の愚かな提案を使用していますが、お気に入りのテキストエディターでコマンドを編集する方法を習得すると、元に戻す方法がありません。
Aleks-Daniel Jakimenko-A。

1
これはとても痛いほど便利です。私がこれなしで私の過去数年を生きたとは信じられません。
SoonDead 2018年

2

標準のcmd.exeシェルを使用したWindows で失敗するソリューションのリストを次に示します(試行錯誤の時間を節約するためです)。

  • git commit -m 'Hello Enter 動作しません:新しい行を要求しません

  • git commit -m "Hello Enter 同上

  • git commit -m "Hello^ Enter 同上

  • git commit -m 'Hello^ Enter World' それは尋ねるので働くように見えます 「もっと?」新しい行を書くことができますが、最後に行うgit logと、それはまだ1行のメッセージであることがわかります...

TL; DR:Windowsの場合でも、コマンドライン解析は機能します 異なり^複数行の入力が可能ですが、ここでは役に立ちません。

最後git commit -eはおそらく最良の選択肢です。


「シェル」ウィンドウが提供する悲しい、悲しい言い訳を使わないでください。
2018年

2

悲しいことに、gitはメッセージの改行文字を許可していないようです。上記のさまざまな適切な解決策はすでにありますが、スクリプトを作成するとき、それらは厄介です。ここでドキュメントも機能しますが、扱いが面倒すぎる(yamlファイルを考える)

これが私がしたことです:

git commit \
    --message "Subject" \
    --message "First line$(echo)Second line$(echo)Third Line"

これもまだ醜いですが、それでもまだ役立つかもしれない「ワンライナー」を可能にします。通常、文字列は変数であるか、変数と組み合わせられるため、醜さは最小限に抑えることができます。


1

あなたがメッセージを提供しないなら、誰もそれについて言及しているのを見ません nanoが開き(少なくともLinuxでは)、複数の行を記述できる。

これだけが必要です:

git commit
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.