commit とログの読み方 — Git Tips
git commit はステージした内容を履歴に固定します。メッセージの残し方で、あとから git log を読むときや追いやすさが変わります。
参考: git-commit · git-log · Commit History · commit --amend
目次
コミットとは何を記録するものか
1 回の commit には、次の情報がまとめて記録されます。
| 記録される内容 | 説明 |
|---|---|
| ステージした内容のスナップショット | git add した時点のファイル内容全体 |
| 親コミットへの参照 | 直前の commit(1 つ前の履歴)への繋がり |
| 作者情報 | user.name / user.email |
| 日時 | commit した瞬間のタイムスタンプ |
| メッセージ | -m で渡した説明文 |
| ハッシュ(コミット ID) | これらすべてから計算される一意な識別子 |
commit は「差分だけ」を覚えているわけではなく、その時点の全体のスナップショットを指す点が特徴です。実際には内部で効率的に共有・圧縮されていますが、利用者から見た挙動としては「その瞬間の状態を丸ごと記録した」と捉えて問題ありません。
git add README.mdgit commit -m "Add README"期待する出力(例)
[main a1b2c3d] Add README 1 file changed, 1 insertion(+)a1b2c3d の部分がコミットハッシュの短縮表記です。この値は commit の内容(親・作者・日時・メッセージなど)から一意に決まるため、同じ内容の commit は必ず同じハッシュになります。
良いコミットメッセージの書き方
コミットメッセージは、あとから履歴を読む人(未来の自分を含む)への説明です。「何を」変更したかと、可能であれば**「なぜ」変更したか**が短く分かると、git log を読み返すときの手間が大きく減ります。
| 例 | 評価 |
|---|---|
fix |
何を直したか分からない |
README を更新 |
一応分かるが、何が変わったか不明 |
README にセットアップ手順を追加 |
「何を」が明確 |
README にセットアップ手順を追加(初回起動で迷う質問が多かったため) |
「何を」+「なぜ」まで分かる |
短いプロジェクトや練習用リポジトリでは、1 行で「何を」を明確にするだけでも十分効果があります。複数行にしたい場合は、次のように 1 行目を要約、空行を空けて詳細を書く形が広く使われています。
git commit -m "ログイン画面のバリデーションを追加" -m "空メール・不正な形式の入力を送信前に止めるため"-m を複数回指定すると、それぞれが別の段落として記録されます。エディタを開いて複数行のメッセージを書きたい場合は -m を省略します。
git commitこのコマンドはデフォルトのエディタ(core.editor の設定、既定では多くの環境で vi や nano)を開きます。使い慣れたエディタに変更したい場合は次のように設定できます。
git config --global core.editor "code --wait"git log でログを読む
commit の履歴を確認する基本コマンドです。
git log期待する出力(例)
commit a1b2c3d4e5f6...Author: あなたの表示名 <you@example.com>Date: Wed Jul 15 06:48:00 2026 +0900 Add READMEcommit 9f8e7d6c5b4a...Author: あなたの表示名 <you@example.com>Date: Wed Jul 15 06:40:00 2026 +0900 Initial commit新しい commit が上に、古い commit が下に表示されます。表示を終えるには q を押します(ページャーが起動している場合)。
特定の 1 件だけ詳細を見たい場合は git show も使えます。
git show a1b2c3dこちらは commit のメッセージに加えて、その commit で実際に変わった差分(git diff と同じような表示)も確認できます。
ログを見やすく表示する
デフォルトの git log は情報量が多く縦に長くなるため、ざっと見渡したいときは --oneline を付けます。
git log --oneline期待する出力(例)
a1b2c3d Add README9f8e7d6 Initial commitブランチの分岐・合流の様子まで見たい場合は --graph を組み合わせます。
git log --oneline --graph --all* a1b2c3d (HEAD -> main) Add README* 9f8e7d6 Initial commit| オプション | 効果 |
|---|---|
--oneline |
1 commit を 1 行に短縮表示 |
--graph |
ブランチの分岐・合流を線で表示 |
--all |
すべてのブランチを対象にする(省略時は今のブランチのみ) |
-n <数> |
直近 n 件だけ表示(例: git log -n 5) |
よく使う組み合わせであれば、Git の alias 機能で短い名前を付けておくと毎回タイプする手間が減ります。
git config --global alias.lg "log --oneline --graph --all"git lgamend で直前のコミットを直す(注意点)
commit した直後に「メッセージを間違えた」「1 つファイルを追加し忘れた」といったときは、--amend で 直前の commit をやり直すことができます。
git commit --amend -m "正しいメッセージ"ファイルを追加し忘れていた場合は、先に git add してから amend します。
git add 忘れていたファイルgit commit --amend --no-edit--no-edit はメッセージを変更せず、内容(ステージされたファイル)だけを追加する場合に使います。
注意点(必ず守ること)
--amend は「直前の commit を別の commit に置き換える」操作です。つまり 元の commit のハッシュは失われ、新しいハッシュの commit に変わります。これは次の場合に問題を起こします。
| 状況 | amend してよいか |
|---|---|
| commit したがまだ誰にも共有していない(push していない) | 問題なし |
すでに git push して他の人と共有している |
避けるべき(履歴の不整合を招く) |
まだ push していないローカルの commit だけを直すという用途に限定して使うのが安全です。共有済みの履歴を修正する必要がある場合は、別の手段(新しい commit で修正内容を追加する、など)を検討してください。
うまくいかないとき
commit したのに git log に出てこない
別のブランチで commit していないか確認してください。git branch --show-current で今のブランチ名を、git log --all --oneline --graph で全ブランチの履歴を確認できます。
git commit を実行したらエディタが開いて操作方法が分からない
-m "メッセージ" を付けずに実行するとエディタが開きます。多くの場合、1 行目にメッセージを入力し、保存して閉じる(vi なら Esc の後 :wq と入力して Enter)ことで commit が完了します。エディタの操作に慣れないうちは、常に -m オプションを使う方が簡単です。
--amend した後に git push で拒否される
! [rejected] main -> main (non-fast-forward)これは、すでに push 済みの commit を amend してハッシュが変わったことが原因です。共有済みの commit は amend しないのが基本方針です。誤って amend してしまった場合、状況によって対処が異なるため、安易に --force で push し直す前に、チームや教材の方針を確認してください。強制 push 自体の詳しい手順は、履歴を書き換える操作として別途慎重に扱うべきトピックです。
git log --graph の表示が崩れる(文字がずれる)
ターミナルの幅が狭い、または日本語混じりのメッセージで見た目が揃わないことがあります。表示だけの問題で履歴自体には影響しないため、気になる場合はターミナルの幅を広げるか --oneline だけで確認してください。
コミットメッセージの typo に気づいた
直前の commit であれば amend で直前のコミットを直す を、まだ push していないことを確認してから使ってください。複数コミット前の typo を直す方法(履歴の書き換え)は、より高度な操作が必要になるため、練習用途では気にしすぎず新しい commit で補足する方が安全です。