コミットメッセージを書く必要があるのはなぜですか?


18

コミットメッセージを書く必要があるのはなぜですか?私はしたくないし、私は毎回その愚かだと思う。

名前のないGUIフロントエンドを使用すると、強制的に実行されます。コマンドラインでVCSを使用している場合でも、他の人が毎回それをしていると聞きます。

1日に数回コミットし、機能を終了していない場合、何を書いていますか?私は何度もコミットした後にメッセージを書くだけで、ミニタグの時か、実際のタグを行う時だと感じています。

私は正しいですか、何かが欠けていますか?また、私は分散システムを使用しています


1
気にしないで、コメント行に「blah」と言ってください。コードを他の誰かと共有しない限り、他の誰もそのコードで作業しない限り、コードをロールバックする必要がなく、単一のコードを間違えない限り、...ちょっと待って、なぜバージョン管理を再び使用するのですか?
マイケルデュラント

回答:


24

「役に立つ、よく考えられたメッセージがあり、機能が100%完了し、ユニットテストがある場合にのみコミットする」と言っているすべての人に、私は言います:あなたはまだSVNの考え方にいます。

gitを使用している場合、これは私がスマートワークフローと呼ぶものです。

  1. 好きなだけコミットします。そこに古いクイックメッセージを書き込みます。とにかく誰もそれを見ません。
  2. 10件のコミットを行った後、作業していた機能が終了しました。次に、テストを作成し、それらのテストをコミットします。またはあなたが望む他のもの。TDDが好きなら、最初にテストを書いてください。Gitも気にしません。
  3. git rebase -i追加した最初の「乱雑な」コミットから、最近の履歴を削除、編集、省略、またはクリーンアップしてローカルメッセージの履歴を整理し、きれいなメッセージを含む論理的でクリーンなコミットにします
  4. クリーンアップ後、誰かにあなたから引き抜いてもらう。
  5. すすぎ、繰り返します。

ステップ3は、あなたが望んでいたすばらしいコミットに終わったときであり、SVNを使用すると、最初の2つのステップを完了するまでコミットを控えなければならないことに注意してください。これは他の答えのほとんどが示唆しています。IOW、あなたは他の人にテストされていない半分書かれたコードを与えたくないので、あなたの機能が完了するまで1週間コミットしません。バージョン管理を最大限に活用していません。

また、ステップ1と3の間のどこでもgit push、ラップトップHDDが死んだ場合に無料のバックアップを取得するために、サーバー上の自分のプライベートリポジトリミラーに変更を加えることができます。


良い答え、私はそれが好きです。リベースを使用するのが少し怖いです。ここでは、それは間違って行くとどのように回復することについての記事ですbluemangolearning.com/blog/2009/03/...

@acid、もしあなたがあなた自身のプライベートな変更をリベースしているなら、衝突はないはずです。また、gitで何かを失うように一生懸命努力する必要があります。
アレックスブドフスキー

4
私のワークフロー、git
rocks-ナズゴブ

1
@ボリス:彼は明らかに転覆ではないgitについてはっきりと話しているため

3
あなたが今やったことを述べた文章を書くことは本当に重要な仕事であってはならず、rebaseで歴史を破壊することは不快に思えます。これらの10回のコミットのうち5回目に、1週間後までキャッチされないバグを導入したとします。単一の小さなコミットに固定できると、非常に役立ちます。
ロボットをガート

55

貧弱なメンテナーがバグを探していて、それがrevに追加されたことを見つけたとき。xyz、彼はどの回転数を知りたいでしょう。xyzが行うことになっていた。


38
さて、彼は私がチェックインしたばかりの5,000行のスパゲッティを読むことができます。一部の人々は怠け者です!
エドワードストレンジ

9
貧しい吸盤が(3年後に)あなたの後に来て、歴史を見て行くので... WTF .. WTF .. WTF、彼は少なくとも何が起こっているかについての考えを持っているでしょう。「ルーチンチェックイン、機能X、不完全」などのコメントを簡単に追加できます。
すぐに

3
@ acidzombie24:すべてのコミットは、それが何であったかを言う必要があるため-「...でタイプミスを修正した」としても、リビジョンの目的がわからない限り、リビジョン履歴には意味がありません。
11

11
@quickly_now、貧しい吸盤はあなた自身かもしれません。残念ながら、これはあなたがそれを完全に理解するためにあなた経験しなければならないことの一つです。

2
@acidzombie-不完全な変更をチェックインするのはなぜですか?
エドワードストレンジ

35

ソースコードにコメントしますよね?

あなたは非常に最高のコメントを書きます。コードがどう言っているのか、理由を言うものです

コミットメッセージはそのようなコメントであり、したがって、それは非常に重要であり、あなたがそれを正しくすることにもっと考えれば考えるほど、それはソフトウェアの将来のメンテナーにとってより有用です。

アクティブなソフトウェアの場合、この特定のコメントは次のように表示されます

gitk-すべてのサンプル

http://longair.net/blog/2009/04/25/a-few-git-tips/にあります)。これにより、いつがソフトウェア取り組んだ誰が何をしたを鳥瞰することができます。

これがコミットコメントの最終的な目標であることに注意してください。つまり、あなたの将来の自分や同僚に「」と言うようなリストに表示することです。


2
@acidzombie、私はgitについてのみ話すことができますが、非常に小さなステップでローカルにコミットし、アップストリームをプッシュするときに単一のコミットでそれらをすべてグループ化できます。 その場合、そのコミットメッセージは説明的です。

2
@acidzombie、コメントを正当化するのに十分な変更を行っていない場合、なぜコミットしますか?説明してください。

2
@Thor:バージョン管理はコードを損失から保護するため、途中で実行されるコードも保護する必要があります。
ベンフォークト

1
@Ben、コミットは長期保存用であり、作業の「チャンク」を正確に反映する必要があります。私の意見では、損失に対する保護はバージョン管理と直交しており、適切なバックアップシステムで処理する必要があります。Mac用のTime Machineは、この目的に非常に適していることがわかりました。Windowsでも同様のシステムが利用できることを願っています。

2
+1私は、ソース管理を無意味なコミットで汚染しないことが好きです。特定のコミットの検索が(有用なコメントを介して)簡単になり、コードをチェックアウトすると、常に動作状態にあることがわかります。従来のバックアップソフトウェアは、コミット間のローカルリポジトリを保護するための優れたオプションです。これはDVCSでうまく機能しますが、ローカルチェックインは実際にはコードのバックアップではないことを覚えておく必要があります。
アダムリア

15

コミットメッセージがあなたにとって愚かに見えるなら、あなたは間違ったコミットを使用しているように聞こえます。

コミットは正当な理由で行う必要があります-作業中の機能のために分解したタスクに関連する必要があります。これらのタスクが正式なものであれ、頭の中にあるものであれ、コミットする各変更はタスクをほぼ完了する必要があるため、何らかの方法で機能する必要があります。

次に、コミットメッセージの方がはるかに優れた目的を果たします。終了したタスクと、それがどこか他の場所で追跡されていない場合、そのタスクが必要な理由、またはその目的を説明してください。

  • カプセル化を改善するためにユーザークラスをリファクタリングしました
  • インターフェイスをコントローラークラスで使用できるようにAPIスタブを作成しました
  • 模擬データベースをテストケースで使用できるように、データベースクラスを抽象クラスに変換しました

その後、あなたまたは他の開発者はリポジトリまたはファイルの履歴を閲覧して、特定の進化がどこで起こったのか、そしてその理由をかなり簡単に見ることができます。または、特定のリビジョンがバグであると判明した場合、コミットメッセージはその行が挿入された理由についての手がかりを提供します。修正され、代わりに正しい方法で修正できます。


1
+1、彼はあまりにも頻繁に、または悪い停止ポイントでコミットしているように聞こえます。実験的な変更のために適切なバックアップポイントが必要な場合は、新しいコミットを作成する代わりに、インデックス、一時ブランチ、以前のコミットを修正するか、エディターのアンドゥバッファーを使用することもできます。
カールビーレフェルト

1
@Karl:git google talkのIIRC linusは、1日に平均6件のコミットが行われていると述べました。今、私はどれくらいがどれくらい考慮されているかわかりませんが、このプロジェクトでは、インターフェイスを生成した後、シリアル化が動作する前に、いくつかのリフレクションが動作したときにコミットしました(正しいデータをループし、それで何もしません)。そして、私は2時間前にインターフェイスを持っていたにもかかわらず、シリアル化を機能させることに取り組んでいます。私は一度コミットして「リフレクションの基本」と言いますが、最初の3つでは、機能がxコミットごとに「機能している」ときに簡単に見ることができるのになぜコメントを残しますか?

実際には、いくつかの基本的なテストを受けるまで待つことがあります。そうでない場合、すべてのコミットをコメントすると、これらのどれが安定した反射を持っているかをどのように知ることができますか?「リフレクションの基本」、「リフレクションのシリアル化」、「リフレクションのシリアル化テスト」シリアル化が必須であると仮定すると、2番目または3番目の可能性があります。テストは、ユニットテストを意味する場合もあれば、基本クラスでの作業が必要な場合はテストを意味する場合もあります。私は、これらのどれが実際に基本が機能しているのかを推測するのではなく、「リフレクション作業の基本」と言うことができる場合、コメントが理にかなっていると思います。また、読み物が少ないときにスキミング/検索するのが簡単です。

@acid、コミットの全体的な目的は、コミットに戻るか、変更をそれと比較できるようにすることです。以前のコミットでそれを行う必要がある場合、どれを選択するかをどのように知るのですか?ここで小説を書く必要はありません。私の意見では、「インターフェイスの動作」、「シリアル化の動作」、「リフレクションの動作」は問題ありません。1日あたりのコミットの最大数は固定されていませんが、メッセージが「インターフェイスで何らかの作業」、「インターフェイスでさらに作業」、「インターフェイスがほぼ完了しました」のように表示される場合は、あまりにも頻繁にコミットしており、インデックス。
カールビーレフェルト

@カール:インデックスは何ですか?gitに隠し場所があることは知っていますが、それについて話しているとは思いません。それは何をするためのものか?

12

コメントをコミットしてもすべてが解決するわけではありません。特に開発者がそれらを入力しなければならないことに怒っている場合、彼らは彼らが助ける限り誤解を招く可能性が常にあります。これを試してください。森の中のパンくずリスト、登山ウェイポイント、トレーサーの弾丸のように考えてください。うまく行けば、他の方法ではわかりにくいパスを概説できます。

それらから大したことをしないでください。正直に言うと:

  • 「機能Xを処理するために編集された空間インデックスエンティティ、Daos、およびUI」
  • 「機能リクエスト#1234およびバグ#5678のインクリメンタルチェックイン」
  • 「最後のビルドを壊しました。これらは私が見逃したファイルです。」

短くして「全体像」を保ちます。可能であれば、機能/バグシステムの問題番号を参照してください。一部のバージョン管理UIには、この種のフィールドが含まれています。


2
短くするという考えで+1。短くてシンプルで十分で十分です。
すぐに

1
私見では、より良いガイダンスは、一般的な「できるだけ短く、必要に応じて長い」レシピです。時にはので、単純に不可欠な情報犠牲にすることなく、短いそれを維持することはできません
HVRを

11

WTF /分の数を減らします;)

ここに画像の説明を入力してください

より幸せなチーム(あなたを嫌わない)に変換し、潜在的に低コストでより良いチームの出力


4
これが本当である理由について詳しく説明していただければ、私はこれを支持します。
SingleNegationElimination

@TokenMacGuy-申し訳ありませんが、フォローしていません。
ルーク

1
表現力豊かなコミットメッセージはどのようにWTF / Minuteを削減しますか(確かにそうです)
SingleNegationElimination

@TokenMacGuy-それは明らかだと思いました。
ルーク

9

したがって、チームの他のメンバーは、プロジェクトツリーへの変更をチェックインしているWTFを知っています。


7
私が唯一の開発者であるときに、プロジェクトにコミットメッセージを追加します!なぜなら、2年後にこのようなものを見るために戻ってきたとき、そのときやっていたWTFを知りたいからです。私はこれが99%の確率で見られないことを完全に知っています。時間の1%で2週間の苦痛が軽減されます。10秒のコミットメッセージを入力することの価値は、長期的な利益に見合う価値があると思います。
すぐに

@quickly_now、苦しみでも?あなたのコード悪いですか?

1
@quickly_now:それにアーメン。1年か2年の間に、たくさんのコードが出てきます。数か月後にすべての最後の部分が行われるはずだったことが、神のみが知っています。神、そして私の改訂履歴。
11

そうそう。私も同意します。経験==謙虚さだと思います。
マイケルデュラント

8

ちゃんとしたコミットメッセージを入力する練習をしなければ、次のようなメッセージを入力する私の同僚のようになってしまうからです。

no changes

または

testing

100以上の変更されたファイルを使用したコミット(冗談はありません!!)。

そのような開発者になれば、メッセージを入力するだけでどんなに愚かだと思っても、世界の他の人の目には愚かに見えるでしょう。


1
私が聞いたことがあれば、コミットする前にピアレビューの完璧な候補のように聞こえます

2
ああ、私はこの種の人々と働いてきました。私を不安定な状態にする。
sevenseacat

4

変更に意味がない場合、なぜコミットするのですか?

意味のある変更をコミットするだけです。例えば、私は他の週にかなり大規模なリファクタリングを行い、約3日かかりました。その間に大量のコミットがありました。若干の変更(「新しい責任を反映するためにクラスXからYに名前を変更」または「クラスQにメソッドZ()を移動」)と、他のものは非常に大きな変更でした。機能/リファクタリングが完了したら、いくつかのコミットがつぶれる可能性があるかどうかを確認します(少なくともgitはそれをサポートしますが、他のツールについては知りません)。

行の編集の途中でコミットしないと思うので、意味があるはずです。最後のコミット以降に何をしたかを説明してください。


3

いくつかの変更を行ってシステムを壊したときの状態を想像し、チームによるいくつかのコミットの後にこれを実現します。変更が何であったかは覚えていませんが、機能Xを拡張したり、モジュールYからファイルを削除したりすると、何かがおかしくなる可能性があることを覚えています。

しかし、残念ながらリビジョン番号はXまたはYを変更したときに通知されません。したがって、この選択は過去N日間にコミットされたすべてのコードを読むか、または書いた詳細なコミットメッセージを読むだけです(コードよりもはるかに読みやすい)。

したがって、コミットメッセージに同じ、退屈な、役に立たない、無関係なテキストを書くと、コミットメッセージを持つよりも有害です。バグの根本を見つけるのではなく、間違ったメッセージがあなたを誤解させるからです。

したがって、コミットするたびに意味のあるコミットメッセージを作成してみてください。これはあなたとメンテナーにも役立ちます。


1日の終わり、1日おき、または機能の終了時ではなく、コミットごとにこれを行う必要があるのはなぜですか?

1
「自然な」理由がないのに、なぜ頻繁にコミットするのですか?

重要な変更を行うたびにコミットするので、リポジトリに反映でき、他の開発者はそれらの変更を確認できます。しかし、あなたがそれを与えた答えは、誰が、いつ、何をしているのかを鳥瞰するのに役立ちます。
GG01

@ acidzombie24まあ、本当にそうする必要がない限り、半分の完成したものをコミットしないでください。そのため、他の人は、病気になったときに電話をかけても何も機能しないときに、あなたが何をしているか、何をしているのかを見ることができます。または、2日間会議に座らなければならないときに中断した場所を思い出すことができます。または、どのリビジョンがビルドを壊したかを簡単に特定し、差分を確認します。
番号

@Thorbjørn:なぜやり直したくない変更をコミットしないのですか?

3

他の人と一緒に作業している場合、コミットメッセージは他の人が何をしたかを実際に確認するために非常に重要です:各人の差分を検索することはより多くの作業であり、誰かがそれをした理由を取得できないことがあります あなたが他の人と仕事をし、誰か(おそらくあなたではない)が実際に振り返らなければならない場合、例えば、予期しない方法で以前のバージョンからどのように振る舞いが変わったかを追跡するために...メッセージ。

単独で作業している場合...ほとんどが「そのまま」コード化されているプロジェクト(たとえば、単一の単純なWebサイトまたはスクリプト)で、私は多かれ少なかれあなたがどこから来たのかを見ることができます。私がそのようなものに取り組んでいる場合、何かに取り組んでいるときに日付/時刻または最新の変更のみを気にします(復元するポイントがありますが、それは実装後ではなく開発中にのみ重要です)。バージョン管理は、いくつかのプラスを使用してバックアップを作成する方法にすぎません-システムを完全に使用していないことに完全に同意します-しかし、一部の小規模プロジェクトでは、それは必要ないかもしれません。

バージョンコントロールが2つの分割された方法で使用される前に、私は思いつきました。1つはプロジェクトの変更を文書化する方法、もう1つは開発者への手伝いとして... コミットメッセージは、ある意味では非常に重要ですが、他の意味ではほとんど役に立たない場合があります。


3

あなたは何かが欠けています。コミットを実行する理由があるに違いありません。そうしないと、コミットしません。

コメントで行う必要があるのは、理由が言葉だけであっても、理由を言葉にするだけです wip: adding new state objects


丁度。(前述のように)「やり直したくない」だけのコードであっても、明らかに何かを意味しているので、簡単な要約を書くのは難しくないはずです。
sevenseacat

2

他の多くの人と同様に、私は暇なときに少しコーディングを行い、リビジョン管理システムを使用して開発と変更の両方を追跡します。空き時間は、週ごと、月ごとに大きく異なります。多くの場合、何週間も何ヶ月もプロジェクトをコーディングする時間がなく、通常10分(通常は1日)から40分(良い日)の範囲でした。それらは確かに素晴らしい状態ではありません-特に問題をデバッグするために。

紛失せず、簡単に取得できるメモを保持することが不可欠でした。各セッションの終了時に、セッションの作業は詳細なメッセージとともにコミットされます。その後、コミット履歴を調べて、進行状況と思考プロセスを追跡できました。これにより、先週、または先月の貴重な時間の損失を最小限に抑えながら、自分がどこにいるかを確認できました。

私が説明しようとしているポイントは、良いコミットメッセージがあなた(そしてあなたの後を追う他の人)が何が起こったのか、何が起こっているのか、何が起こっているのか、何よりも何故なのかを理解するのに役立つということです。


2

論理的に考えてみてください。コミットしているときは、何かが行われたことを意味します。メッセージを残さなかった場合、他の人は何が行われたかをどのように知るでしょうか?


私の信じられないほど明白なコードを一目見れば、彼らはそれが行うすべてのことと、それが100%をパスするすべての驚くべきテストを即座に知るでしょう。申し訳ありませんが、今夜はユーモアの気分です[だから私は子供です];)
マイケルデュラント

1

コミットにコメントしないと、ソースの変更にコメントしたくなるかもしれません。やがて、それはソースを混乱させる可能性があります。


2
私はそれをするように誘惑されていません

1

コミットメッセージは、チェックインの内容をすばやく知る方法であり、チームの他の開発者がコードのどの側面がどのリビジョンで変更されたかを知りたい場合に役立ちます(理由があります)。

関連するメモでは、コミットメッセージでバグトラッカーのケース番号(使用していることを望みます)を指定することをお勧めします。これにより、今後の追跡が容易になります。


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