| この記事の要点 |
|
基本コマンド
# ステージ済の変更をコミット
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-edit | amend 時にメッセージを変えない |
-S | GPG 署名 |
--allow-empty | 空コミット許可 |
--no-verify | pre-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-release や standard-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 生成も楽になります。
子ページはありません
- 用語一覧
- エラー一覧
- git本体のインストール(Linux)
- Linuxサーバーへのgit導入とクライアントのセットアップ
- リモートリポジトリをローカルリポジトリとしてクローンする方法
- リモートとローカルのリポジトリを同期(pull)する方法
- 設定の確認
- gitユーザー名とemailの設定
- リモートリポジトリの作成
- ローカルリポジトリの作成
- 新規ファイル/ディレクトリをインデックスに登録
- インデックスの登録状態を確認
- ローカルリポジトリの変更をコミット
- コミット履歴の確認
- クライアントからリモートリポジトリの接続設定、確認、削除
- リポジトリへのプッシュ
- リモートリポジトリからクライアントへのSSHクローン
- リモートとローカルの差分表示
- バージョンの確認
- プロキシの設定
- ローカルをリモートリポジトリの状態に戻す
- ブランチの作成, 一覧表示, 切り替え
- ブランチのマージと削除
- リベース
- .gitignoreの書き方
- .gitignoreの設定が反映されない場合
- 特定のファイルをgitの管理から外す方法
- 参照(ORIG_HEAD, HEAD, FETCH_HEAD)
- git rm [-r --cached] の取り消し
- 一部のディレクトリ/ファイルのみをリポジトリから復元する方法
- ローカルとリモートリポジトリの有無を同期
- pushの取消し方法
- マージツールの起動方法
- Gitで「MERGING」の状態
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38