メインコンテンツへスキップ
ブログ一覧に戻る
Web制作・運用

Gitのコミットとは?実務で迷わない"コミットメッセージの型"と最低限のルール

2025年12月24日
最終更新: 2026年10月8日
7分で読めます

この記事でわかること

Gitのコミットが保存する内容を、作業ツリー、index、HEADの三つに分けて説明します。stage後の編集が残る図と実例、変更を選ぶコマンド、メッセージの型、適切な粒度を掲載。WIP、revertとresetの違い、個人開発での記録、チームの最小規則、ローカル履歴とバックアップの違いまで具体的に確認します。

2026年10月8日にGitのcommit、add、revert、reset公式マニュアルを再確認した。commitはstagingされたスナップショットを履歴へ記録し、addは次のcommitへ内容を選び、revertは既存commitの効果を打ち消す新しいcommitを作り、resetは参照とindex・作業ツリーの状態を動かし得る。公開済み履歴、未共有履歴、バックアップ、レビュー、承認を分け、resetを共有履歴の安全な取り消しとして説明しない。

コミットは、Gitに変更のまとまりを記録する操作です。写真を撮るイメージは役立ちますが、撮影対象は「いま保存してある全ファイル」ではなく、通常はindexへ選んだ内容です。メッセージは、そのまとまりを後で理解する手掛かりになります。

30秒で要点

  • ファイルの保存、stage、commit、pushは別工程。ローカルのcommitだけでは別の機器にバックアップされません。
  • 何を含めるかを差分で確認し、1つの意図を説明できる単位で記録します。
  • メッセージには変更対象と内容を入れ、理由が重要なら補います。言語や文末はチームでそろえれば十分です。

保存した内容とコミットする内容は違う

作業ツリーは編集するファイル群、indexは次のcommitの準備領域、HEADは現在の履歴の位置です。git-addは実行時点の内容をindexへ入れます。addした後で同じファイルを編集しても、その新しい編集が自動でstageされることはありません。git-commitの通常の動作は、このindexから新しいcommitを作ることです。

コミット前のHEADはv1、indexはv2、作業ツリーはv3で、コミット後はHEADがv2になり、作業ツリーのv3は未stage変更として残る図。
stageしたv2を記録しても、後から編集したv3は残ります。保存とstageとcommitを区別します。

図では、HEADにv1、stage済みの内容にv2、編集中の内容にv3があります。このままcommitすると記録されるのはv2で、作業ツリーのv3は未stage変更として残ります。新しいcommitが1つ増えても、作業ツリーが必ず差分ゼロになるわけではありません。

ログイン機能を記録する練習

最初のcommitがある練習用リポジトリで、index.htmlにログイン画面を追加した場面です。script.jsの別機能の修正やold-style.cssの削除を一緒に入れるかは、同じ意図を構成するかで判断します。名前が同じ日付の変更というだけでまとめません。

1. 対象を選ぶ

git status
git diff
git add index.html
git diff --cached

statusは状態の一覧、diffは未stageの差分、diff --cachedはcommit予定の差分です。git add .でまとめることもできますが、無関係な変更や公開してはいけない設定を含めないよう先に確認します。1ファイル内で意図が混じる場合は、公式のgit add -pによる部分選択も候補です。

2. 内容を言葉にして記録する

git commit -m "ユーザーログイン機能を追加"
git log -1 --oneline
git status --short

commit後にはログと残りの差分を確認します。広い履歴を見る元のgit logも同じ確認役割です。表示されるa1b2c3d4e5f6のような文字列はcommitを識別する表記の例であり、日時の順番を表す連番ではありません。短縮値はリポジトリ内で識別できる長さを使います。

メッセージは「何を、なぜ」で選ぶ

表が収まらない場合は、横にスクロールできます

例読み手が分かること追加したい情報
ユーザー登録機能を追加対象機能と追加という変更必要なら目的や制約を本文に書く
ユーザー登録機能を追加しました。これにより、ユーザーがアカウントを作成できるようになりました。同じ内容を長く繰り返している表題を短くし、理由や注意を分ける
ログイン画面のデザインを改善画面は特定できる余白・エラー表示など実際の変更を具体化する
デザインを改善対象が分からないどの画面かを補う
パフォーマンスを改善するため、画像を最適化変更意図は分かる寸法や形式の変更、実測の有無を区別する
画像を最適化画像に触れたことだけ対象と処理内容を書く

たとえば「ログイン失敗時に入力内容を保持」は、確認すべき動作まで想像しやすい表題です。速くなったと未測定の効果を断定する必要はありません。敬体か常体か、英語か日本語かはGitの成立条件ではなく、読み手との約束です。

粒度とWIPを決める

変更行が少なければよいのではありません。画面と対応する検証を一緒に記録した方が、1つの変更として理解しやすい場合があります。一方、機能追加と無関係な一括整形が混じると原因調査が難しくなります。

作業途中を示すWIPもローカルで経過を保つ用途があります。ただし、共有するブランチでどの状態を許すか、統合前にどう整理するかを決めます。「commitできたから完成」という判断は避け、テストやレビューの状態を別に扱います。

取り消しは目的と共有状態で分ける

表が収まらない場合は、横にスクロールできます

目的操作の考え方注意
stage対象を外すgit reset -- index.htmlはindex側を戻すこのpath指定形式はHEADや作業ファイルを動かさない
共有済みの変更の効果を取り消すrevertで逆の変更を新commitとして記録する後続変更と競合する場合がある
未共有の履歴の位置を変えるresetのcommit指定などを目的別に検討するmodeでindex・作業ツリーへの影響が違う

この表はgit-resetとgit-revertの異なる役割を整理したものです。--hardは作業内容を上書きし得るため、単にエラーを消すための手順にはしません。merge commitのrevertには親の選択など追加の判断があります。

次は、作業ツリーがきれいで、直前の通常commitだけを取り消す練習です。重要な変更のあるリポジトリで無条件に実行しないでください。

git status --short
git revert --no-edit HEAD
git log -2 --oneline

履歴は削除されず、取り消すためのcommitが1つ追加されます。元の変更と逆変更を追えることと、障害時の復旧手順が適切であることは別です。実際のサービスではデータや公開状態も確認します。

記録を失わないために確認すること

ローカルcommitがあっても、その端末の故障で履歴を失う可能性があります。必要な履歴を許可されたremoteへ送る運用やバックアップを別に用意します。pushしていない履歴、未追跡ファイル、外部データまで自動的に保護されるわけではありません。

1人開発でも、未来の自分が理由を読み取れるメッセージは役立ちます。チームでは「1つの意図」「対象が分かる表題」「統合前の確認」の最小セットから始め、困った例が出たときに規則を足す方が実用的です。

学習をつなぐ記事

よくある質問(FAQ)