13.

git commit 完全ガイド

編集
この記事の要点
  • 基本: git commit -m "メッセージ" でステージ済の変更をコミット
  • -am で追跡中ファイルの add + commit を一括(新規ファイルは含まれない)
  • --amend で直前のコミットを修正(push 済は危険)
  • -S で GPG 署名 → GitHub に "Verified" バッジが付く
  • 推奨規約: Conventional Commitsfeat: / fix: / docs: ...)で自動 CHANGELOG / セマンティックバージョニング

基本コマンド

# ステージ済の変更をコミット
git add file.txt
git commit -m "Add feature X"

# 追跡中ファイルの変更を一括 add + commit
git commit -am "Update README"

# 複数行メッセージ(エディタが開く)
git commit

# メッセージをファイルから
git commit -F message.txt

# 空コミット(CI トリガー用など)
git commit --allow-empty -m "trigger CI"

コミットメッセージのエディタ設定

# エディタ変更
git config --global core.editor "code --wait"     # VS Code
git config --global core.editor "vim"             # vim
git config --global core.editor "nano"            # nano

# メッセージテンプレート(チームで統一する場合)
git config --global commit.template ~/.gitmessage

主なオプション

オプション動作
-m "msg"メッセージ指定
-am "msg"追跡中ファイルの add + commit
--amend直前コミットを修正
--no-editamend 時にメッセージを変えない
-SGPG 署名
--allow-empty空コミット許可
--no-verifypre-commit / commit-msg hook をスキップ(要注意)
--author="名 <mail>"著者を明示
--date="..."日時を明示
-vエディタに diff も表示

--amend: 直前コミットの修正

「typo」「ファイル add 漏れ」を直前コミットに混ぜたい場合の必須機能。ただしpush 済のコミットを amend すると履歴改変になるので原則 push 前のみ。

# メッセージ変更
git commit --amend -m "fix: typo in README"

# add 漏れを追加(メッセージは変えない)
git add forgotten.txt
git commit --amend --no-edit

# 共有ブランチで amend してしまった場合
git push --force-with-lease origin feature/login

HEAD とは

HEAD は「現在のチェックアウト位置」を指す参照です。通常はカレントブランチの先端コミットを指します。

# HEAD の中身確認
cat .git/HEAD
# ref: refs/heads/main

# HEAD~1   1つ前のコミット
# HEAD~2   2つ前
# HEAD^    1つ前(同じ)
# HEAD^^   2つ前

# HEAD のコミット情報
git log -1 HEAD
git show HEAD

# 1つ前のコミット内容
git show HEAD~1

Conventional Commits 規約

業界標準のコミットメッセージ規約。type(scope): subject 形式で書きます。conventionalcommits.org

feat(login): add Google OAuth     ← 新機能
fix(auth): handle expired token   ← バグ修正
docs(readme): add install steps   ← ドキュメント
style(home): format with prettier ← 整形(動作変化なし)
refactor(api): extract validator  ← リファクタリング
perf(query): add index            ← パフォーマンス改善
test(login): add unit test        ← テスト
build(deps): bump axios to 1.6    ← ビルド / 依存
ci(github): cache node_modules    ← CI 設定
chore(repo): update .gitignore    ← 雑務
revert: feat(login): add OAuth    ← 取り消し

# Breaking Change(メジャーバージョン上昇)
feat(api)!: change response shape
BREAKING CHANGE: response.user is now response.data.user

この規約を採用すると semantic-releasestandard-version自動 CHANGELOG 生成・自動バージョニング・自動 tagが可能になります。

GPG 署名(-S)

GitHub に "Verified" バッジを付けてなりすまし防止します。OSS や企業のリポジトリで推奨。

# GPG 鍵生成
gpg --full-generate-key

# 鍵 ID 確認
gpg --list-secret-keys --keyid-format=long

# Git に登録
git config --global user.signingkey YOUR_KEY_ID
git config --global commit.gpgsign true

# 公開鍵を GitHub に登録
gpg --armor --export YOUR_KEY_ID
# → GitHub Settings → SSH and GPG keys に貼り付け

# 署名付きコミット
git commit -S -m "feat: add feature"

# SSH 鍵で署名も可能(Git 2.34+)
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub

過去コミットの編集(rebase -i)

複数のコミットをまとめて整理したい場合。push 前のローカル履歴限定で使うのが安全です。

# 直近 5 コミットを対話的に編集
git rebase -i HEAD~5

# エディタが開く:
#   pick   abc123 feat: add login
#   pick   def456 fix: typo
#   pick   ghi789 wip
#
# 操作:
#   p / pick    そのまま
#   r / reword  メッセージ変更
#   e / edit    コミット内容変更
#   s / squash  前のコミットに合体(メッセージも統合)
#   f / fixup   前のコミットに合体(メッセージは前のを採用)
#   d / drop    破棄
#   x / exec    シェルコマンド実行

--no-verify の使いどころと注意

pre-commit hook をスキップします。lint や test が走って遅い時に誘惑されますが、原則使わないべきです。CI で必ず弾かれます。

# 緊急時のみ
git commit --no-verify -m "WIP: emergency fix"

# 推奨: 重い hook を pre-push に移す
# .husky/pre-commit には軽い lint だけ、
# .husky/pre-push に重い test を置く

IDE 統合

  • VS Code: Source Control パネル、メッセージ入力 → Ctrl+Enter でコミット
  • JetBrains IDE: Commit ツールウィンドウ、変更分の diff を見ながらコミット
  • GitHub Desktop: 視覚的、Conventional Commits 風のテンプレ表示
  • Magit (Emacs) / Fugitive (Vim): CLI 派にも人気のリッチな統合

FAQ

Q: 著者名 (user.name / user.email) を間違えたままコミットしてしまった
A: 設定を直し、直近なら git commit --amend --reset-author --no-edit。複数なら git rebase -i で個別に。

Q: コミットを取り消したい
A: 履歴は残して取り消す git revert <sha> / 履歴ごと消す git reset --hard HEAD~1(破壊的)。共有ブランチでは revert 一択。

Q: コミットメッセージの良い書き方
A: 件名は 50 字以内・動詞で始める、空行、本文で「なぜ」を書く。Conventional Commits を採用するとレビューも CHANGELOG 生成も楽になります。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 用語一覧
  2. エラー一覧
  3. git本体のインストール(Linux)
  4. Linuxサーバーへのgit導入とクライアントのセットアップ
  5. リモートリポジトリをローカルリポジトリとしてクローンする方法
  6. リモートとローカルのリポジトリを同期(pull)する方法
  7. 設定の確認
  8. gitユーザー名とemailの設定
  9. リモートリポジトリの作成
  10. ローカルリポジトリの作成
  11. 新規ファイル/ディレクトリをインデックスに登録
  12. インデックスの登録状態を確認
  13. ローカルリポジトリの変更をコミット
  14. コミット履歴の確認
  15. クライアントからリモートリポジトリの接続設定、確認、削除
  16. リポジトリへのプッシュ
  17. リモートリポジトリからクライアントへのSSHクローン
  18. リモートとローカルの差分表示
  19. バージョンの確認
  20. プロキシの設定
  21. ローカルをリモートリポジトリの状態に戻す
  22. ブランチの作成, 一覧表示, 切り替え
  23. ブランチのマージと削除
  24. リベース
  25. .gitignoreの書き方
  26. .gitignoreの設定が反映されない場合
  27. 特定のファイルをgitの管理から外す方法
  28. 参照(ORIG_HEAD, HEAD, FETCH_HEAD)
  29. git rm [-r --cached] の取り消し
  30. 一部のディレクトリ/ファイルのみをリポジトリから復元する方法
  31. ローカルとリモートリポジトリの有無を同期
  32. pushの取消し方法
  33. マージツールの起動方法
  34. Gitで「MERGING」の状態

最近更新/作成されたページ