ハッシュマーク(#)でgit commitメッセージを開始する


283

Gitは#、コミット時にコメント行として始まる行を扱います。これは、チケット追跡システムを使用していて、行の先頭にチケット番号を書き込もうとすると非常に煩わしいです。たとえば、

#123 salt hashed passwords

gitは単にコミットメッセージから行を削除します。ハッシュをエスケープする方法はありますか?私が試した\!、何も働きません。以前の空白#は保持されるため、問題に対する有効な解決策でもありません。


8
@AlexBudovski簡潔さには価値があるからです。
Xavi

8
git 1.8.2(2013年2月)以降git config core.commentchar、コメント文字を設定できます。以下の私の回答を
VonC、2014年

3
Git v2.0.0(2014.05.21)以降git commit --cleanup=scissorsはより柔軟になります。私の回答の
サンガム

4
私は言わなければならない、GitHubの人々がハッシュで問題番号をマークすることに決めたとき、GitHubの人々がこの問題について考えていなかったことに驚いている!
Michael Scheper

1
@Michael公平を期すために、この規則はすでにMantis、Trac、Redmineなどで使用されていました。GitHubは、ホイールを再発明するのではなく、それに従うことを決めたと思います。stackoverflow.com/questions/40495/…を
ケルビン

回答:


235

この動作は、git commitのデフォルトの「クリーンアップ」動作の一部です。行の先頭を維持したい場合#は、別のクリーンアップモードを使用できます。

例えば

git commit --cleanup=whitespace

これを行う場合#は、コミットに表示したくないすべての行を削除するように注意する必要があります。


次の質問は:gitが導入するコミットメッセージコメントはどこで編集できますか?
Alex

2
@Alex:commit.templategit構成変数によって制御されます。
CBベイリー

23
これは、既存のコミットを修正する場合にも最適です。例:git commit --amend --cleanup=whitespace
James Andres、

@CharlesBailey:git commit -t / dev / nullで事前定義されたテキストを取り除くことを期待していましたが、それでもそれが表示されます
Alex

「#123コミットメッセージ」のコミットメッセージと、GitHub for MacやSourceTreeなどのクライアントにコメントを付けることができるので、これらのクライアントが実行していることは間違いないでしょうか。
Phil Ostler 2014

134

git1.8.2(2013年2月)以降#、コミットメッセージのコメント行には「」以外の文字を使用できることに注意してください。

これにより#、バグ番号の参照に「」を使用できます。

エディターでメッセージを編集するようユーザーに要求するときにGitが提供するさまざまな「ヒント」行は、#デフォルトでは「」でコメント化されています。

core.commentCharコンフィギュレーション変数は、この「をカスタマイズするために使用することができます#別の文字に」。


理論的には、単語(複数の文字)を入れることもできますcore.commentChar、git 2.0.x / 2.1の方が厳しくなります(2014年第3四半期)。

NguyễnTháiNgọcDuyによるコミット50b54fdを参照してくださいpclouds

config:core.commentCharに厳密

コメント文字列はサポートされていません(少なくともまだサポートされていません)。また、マルチバイト文字エンコーディングも誤って解釈される可能性があります。

2つのコンマを使用したテストは、これに違反しているため更新されます。eff80a9導入さcore.commentCharれるパッチ(カスタムの「コメント文字」を許可-2013-01-16)とともに追加ます。なぜその振る舞いが望まれるの私には明らかではありません。


git 2.0.x / 2.1(2014年第3四半期)では、次の自動選択が追加されcore.commentCharます:コミット84c9dc2を
参照

ときにcore.commentChar「あるauto」、コメント文字は「で始まる#」デフォルトのようにそれが準備されたメッセージにすでにだ場合、ごく一部に別の文字を見つけます。gitが予期せずいくつかの行を削除するので、これは驚きを止めるはずです。

gitは#、' 'をカスタムテンプレートのコメント文字として認識し、最終的なコメント文字が異なる場合に変換するほど賢くないことに注意してください。
コミットメッセージの一部としてカスタムテンプレートの「#」行を認識します。したがって、これをカスタムテンプレートで使用しないでください。

「auto」の候補文字のリストは次のとおりです。

# ; @ ! $ % ^ & | :

つまり、のようなコマンドgit commit -m '#1 fixed issue'は自動的にcommentCharを ' ;'に切り替え#ます。これは、' 'がコミットメッセージで使用されたためです。


1
この後の修正構文HLに、この関連の質問を参照してください。stackoverflow.com/questions/16164624/...
アロイスMahdal

@Guten True、私はそれを反映するために答えを書き直しました。
VonC、2014年

1
@newbycaはどのバージョンのgitを使用していますか?インタラクティブなリベース中にサポートされていませんか?
VonC、2014

2
ですから、これを設定することができ、例えば、行うことができます$ git config --global core.commentchar ';'
davetapley

6
私はこの答えが大好きです。新しい提案されたソリューションのgit config --global core.commentChar auto
ワンライナー

81

ここでの回答は適切で詳細ですが、私のようなgit noobの場合、git configオプションのカスタマイズはそれほど明白ではありません。ここから変更するための一例である#;コメント文字のためには:

git config core.commentChar ";"

それだけで十分です。


3
これにより、設定されたエディターを開いてコミットメッセージを編集するときにgitがコミットメッセージに追加するデフォルトのコメント付きテキスト変更git commitされます。
Michael Trouw

1
1回限りの修正の場合、これを使用しますgit -c core.commentChar="|" commit --amend|必要なものに置き換えます)。
Droogans

62

コマンドラインオプションを使用できます-m

git commit -m "#123 fixed"

35
しかし、これは恐ろしいコミットメッセージです。バグの内容と修正方法を必ず含めてください
Good Person

3
いくつかのバグがある限り、コミットメッセージは問題ありません
Trident D'Gao

6
バグ追跡システムが突然破損し、バックアップがない場合も同様です。:)
caveman_dick 2015年

38

インタラクティブなリベースを行っている場合、何も含まれていないコミットメッセージを保存すると(#最初にがコメントにしたため無視されたため)、gitは何をすべきかを示します。

Aborting commit due to empty commit message.
Could not amend commit after successfully picking 5e9159d9ce3a5c3c87a4fb7932fda4e53c7891db... 123 salt hashed passwords
This is most likely due to an empty commit message, or the pre-commit hook
failed. If the pre-commit hook failed, you may need to resolve the issue before
you are able to reword the commit.
You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

したがって、メッセージを修正するだけです。

git commit --amend -m "#123 salt hashed passwords"

そしてリベースを続けます:

git rebase --continue

これはすでにコミットをプッシュしたが、メッセージを変更したい人には正しい
Hoang Trinh

エディターを使用してメッセージを入力し、最初にハッシュがある場合は、新しいコミットにも適用されます。
Owain Williams

29

git commit --cleanup=scissors使用すべきです。2014.05.21 にGit v2.0.0に追加されました

から git commit --help

--cleanup=<mode>
  scissors
    Same as whitespace, except that everything from (and including) the line
    "# ------------------------ >8 ------------------------" is truncated if the message
    is to be edited. "#" can be customized with core.commentChar.

@CharlesBaileyがすでに提案しているように、これを手動で使用commit.cleanup = whitespaceして削除するよりもこれがどのように優れているか理解できません# …scissors-modeは、git format-patch/ mailinfo/ によって使用されるはさみ構文をさらにクリーンアップしますamコミットメッセージにコメントを追加するとき構文を使用しませ…-- >8 --…
Slipp D. Thompson 2017

1.「完全に# ...コメントを削除する必要がないため、より良いと思います。2。コメントの2番目の部分についてはよくわかりません。scissorsモードは間違いなくにありgit commit --helpます。どのバージョンgitを使用していますか? @ SlippD.Thompson
サンガム

え?whitespaceモードは、1。先頭と末尾の空白行の削除、2。末尾の空白、3。連続する空白行の折りたたみを提供します。scissors1.先行および後続の空行の削除、2。後続の空白、3。連続する空行の折りたたみ、4。行からの(および行を含む)すべてを削除し# -…- >8 -…-ます。ただし、はさみ線(# -…- >8 -…-)はgit-format-patch/ mailinfo/ を使用した場合にのみ挿入されamます。したがって、通常のgit-commit/ merge/ rebase/ cherry-pickワークフローの場合、scissorsストリッピングモードはwhitespaceモードに比べて利点がありません。v2.11.0
Slipp D. Thompson

@ SlippD.Thompson使用しているgitのバージョンは何ですか?私は2.8.3を使用していますし、git commit --cleanup=scissors DOESは先頭に追加# ------------------------ >8 ------------------------する前にラインをgit status見ます。以下のように: `#------------------------> 8 ------------------- -----#上の行には触れないでください。#以下のすべてが削除されます。#ブランチマスター##最初のコミット##コミットする変更:#新しいファイル:.gitignore `
Sungam

1
私はこれの底に達したと信じています。実際にGitは、# ------------------------ >8 ------------------------「...のように見える」というステータステキストの前にを挿入しscissorsます。しかし、それははさみの行を挿入した後# Conflicts: …のテキスト。私はでcommit.status = false設定したため.gitconfig、ステータステキストは表示されず、競合テキストのみが表示されました。私は正しい立場です。賛成投票に変更します。
Slipp D. Thompson 2017

3

チケット番号には別の接頭辞を使用してください。または、「Bug#42」のように、チケット番号の前に単語を追加します。または、行の先頭に1つのスペース文字を追加します。その空白を削除したい場合は、そのためのコミットフックを追加できます。

個人的には、この種のコミットメッセージ操作をフックで行わない方がいいです。トリガーしたくないときにトリガーされると非常にイライラする可能性があるからです。最も簡単な解決策は、おそらく問題を再考することです。


1
別の言い回しは、問題の回避策にすぎません。プロジェクトのガイドラインに、コミットメッセージはチケットIDで始まる必要があると記載されている場合、機能しません。コミット後のフックは非常に醜いです。私はこの「バグ」をgit開発者に報告するべきだと思います
knittl

気にしないでください、それは間違っているでしょう。ガイドラインに従ってgit開発者に作業を依頼しないでください。デニス・リッチーにC言語を変更するように依頼しないで、ハッシュ文字で始まる変数名の規則をサポートしますよね?ここでも同じことが言えます。コミットメッセージがコメントを許可する場合、これは興味深いもののサポートを追加します。たとえば、差分を追加してコメントアウトしてコミットエディターを開くと、正確な変更を覚える必要がなくなります。先頭のスペース文字を保持することの何が問題になっていますか?
ヴィルヘルムテル

1
gitのコミットメッセージでエスケープ文字をサポートすることはそれほど大したことではありません
knittl

5
これは完全に妥当な機能要求です。特にTrac、AFAICTは、コミットメッセージがハッシュで始まるスリップ番号で始まっていない場合、コミットをバグスリップに関連付けないという事実に照らして考えます。したがって、これは単に誰かの標準ではなく、ツールに必要な構文です。Git開発者に価値があるかどうかを判断させてください。(そして、はい、Trac 問題を修正できます。Gitにできることを要求することに問題はありません。)
Luke Maurer、2011年

「特にTrac、AFAICTは、コミットメッセージがハッシュで始まるスリップ番号で始まらない場合、コミットをバグスリップに関連付けないという事実に照らして」—私のTracでの限られた経験で#xxxは、コミットメッセージのどこかで発生するようなものが問題にリンクします。コミットの最初にある必要はありません。たぶん、これは過去5年間で変わったものでしょうか?
ギルデンスタン

1

私のすべてのコミットは次の#issueNumberように始まるので、私はこのボイラープレートを私のものに入れましたvim .git/hooks/commit-msg

NAME=$(git branch | grep '*' | sed 's/* //') 
echo "$NAME"' '$(cat "$1") > "$1"

それでは、ブランチが#15あり、コミットメッセージを作成するとしますadd new awesome feature。このアプローチでは、最終的なコミットメッセージはになります#15 add new awesome feature

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