Git 直前のコミットに追加・修正する完全ガイド!amendの使い方

git

「コミットした直後に、ファイルの追加忘れに気づいた…」 「さっきのコミットメッセージ、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. 直前のコミットを取り消す
  2. ステージングエリアの内容で新しいコミットを作成
  3. 古いコミットと置き換える

つまり、「コミットの上書き保存」のようなものです。

よくある場面別の解決方法

場面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

  1. ソース管理パネルを開く
  2. 変更をステージング
  3. コミットメッセージ欄の「…」メニュー
  4. 「Amend Last Commit」を選択

GitHub Desktop

  1. Historyタブで直前のコミットを右クリック
  2. 「Amend Commit」を選択
  3. ファイルやメッセージを修正
  4. 「Amend last commit」ボタンをクリック

SourceTree

  1. コミット済みの変更を選択
  2. 「コミット」ボタンの横の矢印をクリック
  3. 「最後のコミットを修正」を選択

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

重要な原則:

  1. push前なら自由にamend
  2. push後は新しいコミット
  3. 共有ブランチでは使わない

安全に使うコツ:

  • 常にgit statusで確認
  • push前にgit logで履歴確認
  • 不安ならgit branch backupでバックアップ

amendを使いこなせば、きれいなコミット履歴を保てます。ただし、「with great power comes great responsibility」- 強力な機能だからこそ、適切に使うことが大切です。

まずはローカルの個人作業から始めて、徐々に使いこなしていきましょう!

コメント

タイトルとURLをコピーしました