「コミットした直後に、ファイルの追加忘れに気づいた…」 「さっきのコミットメッセージ、typoしてた!」 「このファイルも同じコミットに含めたかったのに…」
こんな経験、誰でもありますよね。でも大丈夫!Gitには直前のコミットを修正する便利な機能「–amend(アメンド)」があるんです。
この記事では、コミットをやり直すことなく、スマートに修正する方法を、実例たっぷりで解説していきます。
基本:–amendで直前のコミットを修正

最もよく使う3つのパターン
パターン1:ファイルを追加し忘れた
# しまった!config.jsを入れ忘れた
git add config.js
git commit --amend --no-edit
パターン2:コミットメッセージを修正したい
# メッセージだけ変更
git commit --amend -m "正しいコミットメッセージ"
パターン3:ファイル追加+メッセージ修正
# ファイルを追加して
git add 忘れたファイル.txt
# メッセージも一緒に修正
git commit --amend -m "機能追加:ログイン機能の実装"
–amendって何をしているの?
amendは「修正する」という意味です。実際には:
- 直前のコミットを取り消す
- ステージングエリアの内容で新しいコミットを作成
- 古いコミットと置き換える
つまり、「コミットの上書き保存」のようなものです。
よくある場面別の解決方法
場面1:1つファイルを追加し忘れた
最も多いケースです。README.mdを追加し忘れた例:
# 状況:さっき「機能追加」でコミットしたけど、README.md忘れてた!
# 解決手順
git add README.md
git commit --amend --no-edit
# 結果:README.mdが「機能追加」のコミットに含まれる
--no-edit
オプションで、メッセージはそのまま維持されます。
場面2:複数ファイルをまとめて追加
テストファイルをまとめて追加し忘れた場合:
# 複数ファイルを追加
git add test/*.js
git add test-config.json
# または一括で
git add test/ test-config.json
# コミットに追加
git commit --amend --no-edit
場面3:間違えてコミットしたファイルを除外
逆に、入れてはいけないファイルを含めてしまった場合:
# 1. 一旦、直前のコミットを取り消し(ファイルは残る)
git reset --soft HEAD~1
# 2. 不要なファイルをステージングから除外
git reset HEAD 秘密のファイル.env
# 3. 改めてコミット
git commit -c ORIG_HEAD
-c ORIG_HEAD
で元のコミットメッセージを再利用できます。
場面4:コミットメッセージのtypoを修正
メッセージだけ修正したい時:
# 方法1:新しいメッセージを直接指定
git commit --amend -m "feat: ユーザー認証機能の追加"
# 方法2:エディタで編集
git commit --amend
# エディタが開くので、修正して保存
実践的な使用例
例1:コードレビューの指摘を反映
# レビューで「定数名を変更して」と言われた
vim src/constants.js # 修正
# 修正をステージング
git add src/constants.js
# 同じコミットに含める
git commit --amend --no-edit
# プッシュ(強制が必要)
git push --force-with-lease origin feature/login
例2:.gitignoreの追加忘れ
# node_modulesをコミットしてしまった!
# .gitignoreを作成
echo "node_modules/" > .gitignore
# .gitignoreを追加
git add .gitignore
# node_modulesを削除
git rm -r --cached node_modules/
# コミットを修正
git commit --amend -m "初期設定:プロジェクトのセットアップ"
例3:複数の細かい修正をまとめる
# インデントの修正
git add style.css
git commit --amend --no-edit
# コメントの追加
git add main.js
git commit --amend --no-edit
# importの順番を整理
git add index.js
git commit --amend --no-edit
# 結果:すべて1つのコミットにまとまる
注意!pushした後のamendは危険

なぜ危険なの?
リモートにpush済みのコミットをamendすると、履歴が書き換わります。
# ローカルでamend
git commit --amend -m "修正後のメッセージ"
# 通常のpushはエラーになる
git push origin main
# エラー: ! [rejected]
# 強制pushが必要(危険!)
git push --force origin main
チーム開発での問題
他の人が古いコミットを基に作業していると、コンフリクトの原因になります:
チームメンバーA: コミットabc123を基に作業
あなた: コミットabc123をamendで書き換え → def456に
チームメンバーA: pullしたらコンフリクト発生!
安全な代替案:push済みの場合
# amendの代わりに新しいコミットを作る
git add 修正ファイル
git commit -m "fix: ○○の修正"
# または、revertを使う
git revert HEAD
git add 修正ファイル
git commit -m "revert: ○○を修正して再実装"
amendのオプション活用術
–no-editオプション:メッセージを変えない
# メッセージはそのままでファイルだけ追加
git add 新しいファイル.txt
git commit --amend --no-edit
-Cオプション:別のコミットからメッセージをコピー
# 2つ前のコミットメッセージを使い回す
git commit --amend -C HEAD~2
–reset-authorオプション:作者情報を更新
# 作者情報を現在の設定に更新
git commit --amend --reset-author --no-edit
–dateオプション:日時を指定
# 日時を指定してamend
git commit --amend --date="2024-01-15 10:00:00" --no-edit
トラブルシューティング
トラブル1:amendしたけど元に戻したい
# reflogで履歴を確認
git reflog
# 出力例:
# abc1234 HEAD@{0}: commit (amend): 修正後
# def5678 HEAD@{1}: commit: 修正前
# 元に戻す
git reset --hard HEAD@{1}
トラブル2:amendでコンフリクトが発生
# 一旦amendを取り消す
git reset --hard ORIG_HEAD
# 最新を取得してから再度試す
git pull origin main
git add ファイル
git commit --amend --no-edit
トラブル3:間違えて別のブランチでamendした
# 現在のブランチを確認
git branch
# 正しいブランチに移動
git checkout correct-branch
# cherry-pickで変更を持ってくる
git cherry-pick wrong-branch
便利なエイリアス設定
よく使うコマンドを短縮:
# ~/.gitconfigに追加
git config --global alias.amend 'commit --amend --no-edit'
git config --global alias.amendit 'commit --amend'
# 使い方
git add file.txt
git amend # メッセージそのまま
git amendit # メッセージ編集
VSCodeやGUIツールでのamend
Visual Studio Code
- ソース管理パネルを開く
- 変更をステージング
- コミットメッセージ欄の「…」メニュー
- 「Amend Last Commit」を選択
GitHub Desktop
- Historyタブで直前のコミットを右クリック
- 「Amend Commit」を選択
- ファイルやメッセージを修正
- 「Amend last commit」ボタンをクリック
SourceTree
- コミット済みの変更を選択
- 「コミット」ボタンの横の矢印をクリック
- 「最後のコミットを修正」を選択
amendを使うべき時、使わない方がいい時

使うべき時 ✅
- まだpushしていないローカルのコミット
- 個人ブランチでの作業
- typoや軽微な修正
- ファイルの追加忘れ
- コミットをきれいに保ちたい時
使わない方がいい時 ❌
- すでにリモートにpush済み
- 他の人と共有しているブランチ
- mainやmasterブランチ
- タグが付いているコミット
- マージコミット
代替手段
# push済みの場合:新しいコミットを作る
git add 修正ファイル
git commit -m "fix: ○○を修正"
# 大きな変更の場合:squashを使う
git rebase -i HEAD~3
# エディタでsquashを選択
プロのTips
Tip 1:amendする前に差分確認
# 何が変更されるか確認
git diff HEAD
git status
# amendのプレビュー
git add ファイル
git diff --staged
Tip 2:コミットメッセージのテンプレート
# テンプレートファイルを作成
cat > ~/.gitmessage << EOF
# タイプ: 簡潔な説明
# なぜこの変更が必要か
# どのように実装したか
EOF
# 設定
git config --global commit.template ~/.gitmessage
Tip 3:amendの履歴を残す
# amendする前にタグを付けておく
git tag before-amend
# amend実行
git commit --amend
# 必要なら戻せる
git reset --hard before-amend
まとめ:amendで効率的なGit生活を
git commit –amendは、日々の開発で非常に便利な機能です。
覚えておくべき基本コマンド:
# ファイル追加(メッセージそのまま)
git add ファイル
git commit --amend --no-edit
# メッセージ修正
git commit --amend -m "新しいメッセージ"
# エディタで編集
git commit --amend
重要な原則:
- push前なら自由にamend
- push後は新しいコミット
- 共有ブランチでは使わない
安全に使うコツ:
- 常に
git status
で確認 - push前に
git log
で履歴確認 - 不安なら
git branch backup
でバックアップ
amendを使いこなせば、きれいなコミット履歴を保てます。ただし、「with great power comes great responsibility」- 強力な機能だからこそ、適切に使うことが大切です。
まずはローカルの個人作業から始めて、徐々に使いこなしていきましょう!
コメント