git commitメッセージで過去形または現在形を使用する必要がありますか?[閉まっている]


531

私は一度読んでいるgitの「xに対してテストを追加」など、メッセージが不可欠現在時制にする必要がありますコミット。私はいつも過去形、たとえば「xの追加テスト」を使用していることに気づきました。

以下は、最近のJohn Resigコミットで、2つのメッセージを1つにまとめたものです。

操作テストでさらにjQueryセットの結果を調整します。予想されるテスト結果の順序も修正しました。

それは重要ですか?どちらを使用すればよいですか?


12
この質問は、主に意見に基づくものとしてクローズする必要があります。すでに命令過去形の意見の違いを見てください!そうは言っても、履歴の書き換え、チェリーピック、パッチの適用などを行うときに何をしているのかを明確にするのに役立つので、私は命令時制に投票します。




3
@Eonil意見ベースであるためにクローズされている場合、意見ベースであるためクローズされます。
ラチェットフリーク

回答:


601

現在の緊迫した命令型のコミットメッセージの設定は、Git自体から来ています。GitリポジトリのDocumentation / SubmittingPatchesから:

命令ムードの変更を説明します。たとえば、「[このパッチ]はxyzzy do frotzを作成します」または「[I] xyzzyをfrotzに変更しました」ではなく、「コードベースを変更するようにコードベースに命令を与えているかのように」動作。

そのため、そのスタイルで書かれた多くのGit commitメッセージが表示されます。チームまたはオープンソースソフトウェアで作業している場合、一貫性を保つために全員がそのスタイルに固執していると役立ちます。プライベートプロジェクトで作業していて、git履歴を表示するのがあなただけである場合でも、他のユーザーと作業するときに高く評価される良い習慣を確立するため、命令ムードを使用すると役立ちます。


90
これは素晴らしい選択だと思います。コミットとは何か、差分形式で考えてみましょう。以前の状態から新しい状態に移行するための一連の指示です。差分が「ここにこの行を追加し、ここにこの行を削除する」とあるのと同じように、コミットメッセージは「この変更を行う」と定性的に言います。(はい、gitはコミットをメタデータ付きのツリーとして単純に保存しますが、人間にとって、コミットの重要な部分は差分です。)
Cascabel

124
コミットは、以前の状態から新しい状態に移行するための一連の指示と見なされる場合があります。しかし、私はそれをコードの進化におけるチェックポイントとしてより多く見ています。私にとって、コミットメッセージは、前回のコミット以降にコードに対して行われた処理のログです。丸太の場合、過去形はもっと意味があります。コミットメッセージが一連の指示であると本当に思う場合は、命令形が適切です。私はそのようには考えていません。
karadoc

10
@oschrenk:ファイルの新しいバージョンに理由がありました:「変更を命令ムードで説明してください。たとえば、「[このパッチ]はxyzzyをfrotzにする」または「[I] xyzzyをfrotzに変更する」の代わりに「make xyzzy do frotz」 '、まるでコードベースに動作を変更するように命令するかのように。」
mipadi 2013

44
gitので、あなたや他の誰かがやって終わる可能性があるため、コミットメッセージは不可欠、現在形であるべきrebaseか、cherry-pickその場合には、コミット元のコンテキストの外部で使用することができます。結果として、読者が周囲のコミットメッセージを表示することを期待せずに、コミットメッセージをスタンドアロンで記述する必要があります。パッチをチェリーピッキングする場合、「Fixed bug#124」や「パフォーマンスを改善するために変更されたソート」ではなく、「Fixクイックソートアルゴリズム」または「ソート:パフォーマンスを改善する」を適用する方が理にかなっています。
ミッコランタライネン2013年

5
これについて私が考える方法は、このコミットを自分のブランチに適用することを選択した場合に何が変わるかをメッセージが教えてくれるということです。ログではなく、移動可能な状態であり、特定の状態を選択するとどうなるかを知る必要があります。
steinybot 2013年

357

ほとんどの場合、プロジェクトでは過去形を使用する必要があります。いずれの場合でも、プロジェクトは一貫性と明確さのために常に同じ時制を使用する必要があります。

現在形を使用することを主張する他の議論のいくつかは理解しますが、通常は適用されません。以下の箇条書きは、現在形で書くための一般的な議論と私の返答です。

  • 現在形で書くことは、あなたがしたことではなく、コミットを適用すると何が起こるかを誰かに伝えます。

これが現在時制を使用したい最も正しい理由ですが、プロジェクトの正しいスタイルでのみです。この考え方では、すべてのコミットをオプションの改善または機能と見なし、特定のリポジトリで保持するコミットと拒否するコミットを自由に決定できます。

この議論は、真に分散したプロジェクトを扱っている場合に有効です。分散プロジェクトを扱っている場合は、おそらくオープンソースプロジェクトで作業しています。そして、実際に配布されている場合、それはおそらく非常に大規模なプロジェクトです。実際、それはおそらくLinuxカーネルかGitのどちらかでしょう。LinuxがGitの普及と普及につながったと考えられるため、人々がそのスタイルを権威と考える理由は簡単に理解できます。はい、この2つのプロジェクトではスタイルが理にかなっています。または、一般に、大規模なオープンソースの分散プロジェクトで動作します。

そうは言っても、ソース管理のほとんどのプロジェクトはこのように機能しません。通常、ほとんどのリポジトリでは正しくありません。これはコミットについての現代的な考え方です。Subversion(SVN)とCVSリポジトリは、このスタイルのリポジトリチェックインをほとんどサポートできませんでした。通常、統合ブランチは不正なチェックインのフィルタリングを処理しましたが、それらは一般に「オプション」または「便利な機能」とは見なされませんでした。

ほとんどのシナリオでは、ソースリポジトリにコミットするときに、この更新で何が変更されたかを説明するジャーナルエントリを作成し、将来、他の人が変更が行われた理由を簡単に理解できるようにします。通常、これはオプションの変更ではありません。プロジェクトの他のユーザーは、プロジェクトをマージまたはリベースする必要があります。あなたは、「私は今日、親愛なる日記のような日記を書いていない会い少年と彼は言います。私にこんにちは」を、代わりにあなたが書く「私が出会った少年を、彼が言った私に挨拶を。」

最後に、このような非分散型プロジェクトの場合、コミットメッセージを読む時間の99.99%は、履歴を読むためのものです。履歴は過去形で読み込まれます。0.01%の確率で、このコミットを適用するか、ブランチ/リポジトリに統合するかを決定します。

  • 一貫性。これは、多くのプロジェクト(git自体を含む)での方法です。また、コミットを生成するgitツール(git mergeやgit revertなど)もそれを行います。

いいえ、バージョン管理システムにログインしたことのあるプロジェクトの大部分は過去形で履歴を持っていることを保証します(参照はありませんが、現在形の議論がGit以来新しいことを考えると、おそらく正しいでしょう)。現在形の「改訂」メッセージまたはコミットメッセージは、真に分散したプロジェクトでのみ意味を持ち始めました-上記の最初のポイントを参照してください。

  • 人々は「このコードベースに何が起こったか」を知るために履歴を読むだけでなく、「このコミットを選択したときに何が起こるか」、または「これらのコミットのためにコードベースにどのような新しいことが起こるか」などの質問に答えます私は将来合併するかもしれないし、しないかもしれない」

最初のポイントを参照してください。人がコミットメッセージを読む時間の99.99%は、履歴を読むためです。履歴は過去形で読み取られます。0.01%の確率で、このコミットを適用するか、ブランチ/リポジトリに統合するかを決定します。99.99%は0.01%に勝ります。

  • 通常はもっと短い

短いので不適切な時制/文法を使用するという良い議論を見たことがありません。標準の50文字のメッセージでは、おそらく平均で3文字しか保存されません。そうは言っても、現在の時制は平均しておそらく数文字短くなります。

  • あなたはあなたの問題/機能トラッカーのチケットのタイトルでより一貫してコミットに名前を付けることができます(時々未来ですが過去形を使用しません)

チケットは、現在発生しているもの(このボタンをクリックしたときにアプリ間違った動作を示しているなど)、または将来実行する必要があるもの(テキスト編集者によるレビューが必要など)のいずれかとして記述されます。

履歴(つまり、コミットメッセージ)は、過去に行われたものとして書き込まれます(たとえば、問題修正されました)。


79
私は今日、命令型のコミットを優先するという想定について最初に聞いた。私には不自然で奇妙に聞こえたので、さらに意見を求めることにしました。コミットメッセージは過去形のほうが自然だと思っているのは私だけではないことを嬉しく思います。:)
karadoc

57
gitの自動生成されたマージおよびリベースコミットメッセージは必須で現在形(「マージ」ではなく「マージ」、「リベース」ではなく「リベース」)であるため、一貫性を保つために独自のコミットメッセージでこれを一致させることができます。
mjs 2013

13
違いは、ソフトウェアへの変更に焦点を合わせる-"Yを実行することでXを修正する"-またはリポジトリ -"Xを修正するためにYを実行する" の違いのようです。良い議論には+1ですが、私は通常、リポジトリは結果のソフトウェアではなく自分自身に焦点を当てるべきだと思います。
l0b0

28
重要なことは、巨大なプロジェクト(Linuxなど)に必須の現在時制を使用しているため、明らかにスケーリングすることです。さらに、過去時制を使用しても、ほとんど労力を必要としません。結果として、命令的な現在形以外の何かを使用する理由はありません(「過去形でコミットメッセージを書くのに慣れている」以外)。gitコマンドセットを習得できれば、命令型の現在時制で書くことを習得できます。
ミッコランタライネン2013年

35
命令型は「git以降の新機能」ではありません。ChangeLogはgitよりもずっと前から存在しており、GNUプロジェクトでは常に命令型の使用が推奨されるスタイルでした。 gnu.org/prep/standards/html_node/Style-of-Change-Logs.html
adl

81

私は365gitで詳細な説明を書きました。

必須の現在時制の使用は、少し慣れる必要があります。私がそれについて言及し始めたとき、それは抵抗に会いました。通常、「コミットメッセージは私が行ったことを記録します」という流れに沿って表示されます。ただし、Gitは、変更を取得できる場所が多数存在する可能性がある分散バージョン管理システムです。あなたがやったことを伝えるメッセージを書くのではなく、これらのメッセージは、コミットを適用することで何が行われるかを説明するものと考えてください。タイトルでコミットするのではなく:

Renamed the iVars and removed the common prefix.

このようなものがあります:

Rename the iVars to remove the common prefix

これは、あなたがやったことではなく、コミットを適用することで何ができるかを誰かに伝えます。また、リポジトリの履歴を見ると、Gitで生成されたメッセージもこの時制で書かれていることがわかります。最初は奇妙な感じがしますが、それは理にかなっており(申請時に利用可能な推薦状)、最終的には自然になります。

すべてのことを言った-それはあなたのコード、あなたのリポジトリです:それであなた自身のガイドラインをセットアップしてそれらに固執してください。

ただし、この方法をgit rebase -i選択する場合は、rewordオプションを使用することを検討することをお勧めします。


7
さて、GitオープンソースプロジェクトとGitの通常の使用という2つの異なるガイドラインを混同しました。提供されたリンクは、時制についてまったく言及していません。公式のGit文書では、50文字の制限についてのみ言及しています。 Gitは分散VCSであり、そこから変更を取得するための多くの場所があります...コミットの適用が何を行うかについての指示として、これらのメッセージを検討してください。 これは、実際に分散プロジェクトであるいくつかのプロジェクトにのみ適用されます。Gitコミットの99.999%は、このような方法で手動で適用されることはありません。ほとんどのプロジェクトでは、履歴は変更ログであり、過去形である必要があります。
Matt Quigley 2013

4
「フルストップをスキップする必要があります」
takeshin

30

現在の緊迫した命令に固執する

  • 標準があるのは良いことです
  • これは、「実装」、「修正」、または「何かをテスト」という形式のバグトラッカーのチケットと一致します。

16

誰のためにメッセージを書いていますか?そして、その読者は通常、所有権の前後にメッセージを読んでいますか?

ここで良い答えが両方の観点から与えられたと思います、私はおそらくすべてのプロジェクトに最良の答えがあることを示唆するだけでは不十分でしょう。分割投票は、多くを示唆するかもしれません。

つまり要約すると:

  • メッセージは主に他の人のためのものであり、通常、変更を想定する前のある時点で読んでいます。変更を加えると、既存のコードに対して何が行われるかについての提案。

  • 主に自分自身(またはチーム)へのジャーナル/レコードとしてのメッセージですが、通常は変更を想定した観点から読み、何が起こったかを見つけるために検索します。

おそらく、どちらにしても、これがチーム/プロジェクトのモチベーションを導くでしょう。


10

それは重要ですか?人々は一般に、メッセージを正しく解釈するのに十分賢いですが、そうでなければ、おそらくとにかくリポジトリにアクセスさせないでください!


27
何人かの人々、そのことについてはかなりのようなもの。
ウェズリー・マーチ

2
@mogリンクは、現在と過去について何も述べていません。
2013年

2
プロジェクトの規模が大きくなると、コードレビューやバグハンティングをしている人々は多くのコミットを目にするため、あなたと私が提供できるすべての支援が必要になります。適切なコミットメッセージを書き込まないことで将来的に大きな頭痛の種となる数秒を節約しても意味がありません。
ミッコランタライネン2013年

良いコミットメッセージを書いてはいけないと言っているのではありません。過去形と現在形のどちらを使ってもかまいません。
Michael Baldry 2018年

1
コミットメッセージを解釈できない人が、その人の能力が不十分であるか、または適切なコミットメッセージを作成する能力が不十分であることをどのように知っていますか?
ハリス

7

それはあなた次第です。ちょうどあなたが望むようにコミットメッセージを使用してください。しかし、時間と言語を切り替えない方が簡単です。

そして、あなたがチームで開発する場合-それは議論され、修正されるべきです。

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