この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:6
ページ更新者:T
更新日時:2026-06-11 07:10:02

タイトル: ローカルリポジトリの変更をコミット
SEOタイトル: 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 生成も楽になります。