Git でコミットメッセージを変更する方法|直前から過去まで完全ガイド

プログラミング・IT

コミットした後に「あ、コミットメッセージ間違えた!」と気づいたこと、ありませんか?

タイポしていたり、チケット番号を書き忘れたり、全然違うメッセージを書いてしまったり…。開発現場では日常茶飯事です。

でも安心してください。Gitなら、コミットメッセージは後からでも変更できます

この記事では、直前のコミットから過去の複数のコミットまで、状況に応じた変更方法を分かりやすく解説していきます。

スポンサーリンク

コミットメッセージを変更できる理由

まず基本的な仕組みから理解しておきましょう。

Gitでは、コミットメッセージはコミット全体の一部として扱われます。メッセージを変更すると、コミットID(SHA-1ハッシュ値)も変わります

つまり、古いコミットを「編集」するのではなく、新しいコミットで置き換えるという仕組みです。

これがGitでコミット履歴を書き換えられる理由であり、同時に注意が必要な理由でもあります。

方法1:直前のコミットメッセージを変更する(最も簡単)

一番よくあるケースが「今コミットしたばかりのメッセージを直したい」というパターンです。

基本的な変更方法

次のコマンドを実行するだけです。

git commit --amend

このコマンドを実行すると、テキストエディタが開き、現在のコミットメッセージが表示されます。

エディタでの操作手順

  1. テキストエディタ(Vim、Nano、VS Codeなど)が起動する
  2. コミットメッセージを修正する
  3. 保存して閉じる

Vimの場合の操作方法

Gitのデフォルトエディタは多くの場合Vimです。初めての方は戸惑うかもしれませんが、次の手順で操作できます。

  1. i キーを押して入力モードに切り替え
  2. メッセージを編集
  3. Esc キーを押してコマンドモードに戻る
  4. :wq と入力して Enter(保存して終了)

コマンドラインで直接変更する方法

エディタを開かず、コマンドライン上で直接メッセージを指定することもできます。

git commit --amend -m "修正後のコミットメッセージ"

この方法なら、エディタ操作が不要でより素早く変更できます。

実例:チケット番号を追加する

# 元のコミット
git commit -m "ログイン機能を実装"

# あ、チケット番号を書き忘れた!
git commit --amend -m "refs #123 ログイン機能を実装"

ファイルの変更も一緒に追加できる

git commit --amend は、コミットメッセージだけでなく、ファイルの変更も追加できます。

# 追加し忘れたファイルがあった場合
git add 忘れていたファイル.txt
git commit --amend --no-edit

--no-edit オプションをつけると、コミットメッセージはそのままで、ステージされた変更だけを追加できます。

よくある使用例

  • 細かなタイポやフォーマット修正を追加したい
  • テストファイルを追加し忘れた
  • 複数のファイルを1つのコミットにまとめたい

方法2:過去の特定のコミットメッセージを変更する

直前ではなく、数コミット前のメッセージを変更したい場合は、インタラクティブリベースを使います。

変更したいコミットを特定する

まず、どのコミットを変更するか確認しましょう。

git log --oneline

出力例:

a1b2c3d (HEAD -> main) 最新のコミット
e4f5g6h 2つ前のコミット:これを変更したい
i7j8k9l 3つ前のコミット
m0n1o2p 4つ前のコミット

インタラクティブリベースを開始する

変更したいコミットまでの数を数えて、次のコマンドを実行します。

git rebase -i HEAD~n

n には、変更したいコミットを含む数を指定します。

例えば、2つ前のコミットを変更する場合:

git rebase -i HEAD~3

「なぜ3なのか?」と思うかもしれませんが、リベースは変更したいコミットの1つ前から始まるため、2つ前を変更するには3を指定します。

エディタでの操作

エディタが開くと、次のような表示になります。

pick i7j8k9l 3つ前のコミット
pick e4f5g6h 2つ前のコミット:これを変更したい
pick a1b2c3d 最新のコミット

# Rebase m0n1o2p..a1b2c3d onto m0n1o2p
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message

重要な操作:pickをrewordに変更

変更したいコミットの行の先頭にある pickreword に書き換えます。

pick i7j8k9l 3つ前のコミット
reword e4f5g6h 2つ前のコミット:これを変更したい
pick a1b2c3d 最新のコミット

保存して閉じると、該当コミットのメッセージ編集画面が開きます。

rewordとeditの違い

リベースには rewordedit という2つの似た機能があります。

reword

  • コミットメッセージだけを変更
  • ファイルの内容は変更しない
  • シンプルで安全

edit

  • コミットメッセージもファイルも変更可能
  • リベースが一時停止する
  • git commit --amend で変更後、git rebase --continue で再開

通常、メッセージだけを変更する場合は reword を使います。

複数のコミットメッセージを一度に変更

複数のコミットメッセージを変更したい場合も、同じ手順で可能です。

reword i7j8k9l 3つ前のコミット
pick e4f5g6h 2つ前のコミット
reword a1b2c3d 最新のコミット

複数の reword を指定すると、Gitは順番にそれぞれの編集画面を開いてくれます。

方法3:プッシュ済みのコミットメッセージを変更する

ここまで紹介した方法は、ローカルのみのコミットを変更する場合です。

すでにGitHubやGitLabなどのリモートリポジトリにプッシュ済みの場合は、追加の手順が必要になります。

変更手順

  1. ローカルで方法1または方法2を使って変更
  2. フォースプッシュでリモートを上書き
git push --force

または、より安全な方法として:

git push --force-with-lease

–force と –force-with-lease の違い

–force(強制プッシュ)

  • 無条件にリモートを上書き
  • 他の人の変更も消してしまう可能性がある

–force-with-lease(安全な強制プッシュ)

  • リモートが変更されていないかチェック
  • 他の人がプッシュしていたら失敗する
  • チーム開発では必ずこちらを使うべき

プッシュ済みのコミット変更は慎重に

注意すべき重要なポイント

リモートにプッシュ済みのコミット履歴を書き換えることは、チーム開発では大きな問題を引き起こす可能性があります。

起こりうる問題

  • 他のメンバーがすでにそのコミットをプルしている
  • マージコンフリクトが発生する
  • 履歴の不整合が起きる

基本ルール

  • 自分だけのブランチなら変更OK
  • 共有ブランチは変更しない
  • main/masterブランチは絶対に変更しない
  • チームメンバーに事前確認する

もしチームで共有しているブランチのメッセージを変更したい場合は、以下の方法を検討しましょう。

  1. 新しいコミットで修正を追加(履歴は残る)
  2. チーム全員に変更を周知してから実施
  3. そもそも変更しない(重大な問題でなければ放置)

方法4:GitHub/GitLabのWebインターフェースで変更

コマンドラインを使わずに、Web上で変更する方法もあります。

GitHubの場合

Pull Request経由での変更

  1. Pull Requestページを開く
  2. 「Commits」タブを表示
  3. 変更したいコミットの右側にある「…」をクリック
  4. 「Edit commit message」を選択
  5. メッセージを編集して保存

ただし、この機能はPull Request内のコミットに限られます。

GitHub Desktopを使う方法

GitHub DesktopというGUIアプリを使うと、より簡単に変更できます。

  1. GitHub Desktopを開く
  2. 変更したいコミットを右クリック
  3. 「Amend Commit」を選択
  4. メッセージを編集して保存

コマンドライン操作が苦手な方にはおすすめです。

コミットメッセージの書き方のベストプラクティス

せっかく変更方法を覚えたので、最初から良いコミットメッセージを書く習慣も身につけましょう。

良いコミットメッセージの基本ルール

1行目は50文字以内

要約として、簡潔に何をしたかを書きます。

# 良い例
ログイン機能のバリデーションを追加

# 悪い例(長すぎる)
ユーザーがログインするときにメールアドレスとパスワードの形式をチェックするバリデーション機能を実装しました

命令形で書く

「〜した」ではなく「〜する」の形式で書きます。

# 良い例
ユーザー認証機能を追加

# 悪い例
ユーザー認証機能を追加しました

これはGit自体が自動生成するメッセージが命令形だからです(例:「Merge branch ‘main’」)。

「何を」と「なぜ」を書く

# より良い例
ログインフォームのバリデーションを追加

セキュリティ向上のため、クライアント側でも
入力チェックを行うように変更。
サーバー側のバリデーションと重複するが、
ユーザー体験の改善を優先。

プロジェクトの規約に従う

チームやプロジェクトによって、コミットメッセージの書き方には独自のルールがあることも。

一般的なフォーマット:

  • [type] 要約 形式(例:[feat] ログイン機能追加
  • refs #123 でチケット番号を参照
  • fix: feat: などのプレフィックス(Conventional Commits)

トラブルシューティング:よくある問題と解決法

エディタが開かない・操作方法が分からない

Gitのデフォルトエディタは環境によって異なります。使いやすいエディタに変更しましょう。

VS Codeをデフォルトエディタにする

git config --global core.editor "code --wait"

Nanoをデフォルトエディタにする

git config --global core.editor nano

リベース中にエラーが出た

リベースを中止するには:

git rebase --abort

これで元の状態に戻ります。

間違えて変更してしまった

git commit --amendgit rebase を使った後、「やっぱり元に戻したい」という場合。

reflogで元に戻す

# 操作履歴を確認
git reflog

# 元のコミットに戻る
git reset --hard HEAD@{1}

reflogには過去90日分の操作履歴が残っているので、直近の変更なら大抵復元できます。

プッシュ後の変更でチームに影響が出た

もし既にプッシュしたコミットを変更してチームメンバーに影響が出た場合:

チームメンバーへの対応依頼

# ローカルブランチを削除
git branch -D ブランチ名

# リモートから最新を取得し直す
git fetch origin
git checkout ブランチ名

こういった混乱を避けるためにも、プッシュ済みのコミットは極力変更しないのがベストです。

コミットメッセージ変更のタイミング:いつ使うべきか

コミットメッセージを変更できることは分かりましたが、実際にはどんなときに変更すべきでしょうか?

変更すべき場合

明らかな間違いがある

  • タイポや誤字脱字
  • チケット番号の記入ミス
  • 全く別の作業内容を書いてしまった

規約違反を修正する

  • チケット番号の記入忘れ
  • プレフィックスの付け忘れ
  • フォーマットの間違い

セキュリティ上の問題

  • パスワードやAPIキーを誤って書いてしまった
  • 機密情報が含まれている

変更しない方がいい場合

既に複数人が使っているブランチ

チーム開発では、履歴の一貫性が重要です。些細な間違いなら、そのままにしておく方が安全なこともあります。

内容は正しいが、もっと良い表現にしたい

完璧主義になりすぎる必要はありません。内容が伝わっていれば、多少の表現の差は問題になりません。

古いコミット(数週間~数ヶ月前)

時間が経ったコミットを変更すると、PRのレビュー履歴や議論の文脈が失われる可能性があります。

まとめ:状況に応じた使い分け

Gitのコミットメッセージ変更方法をまとめます。

状況別の使い分け表

状況使うコマンド難易度注意点
直前のコミット(未プッシュ)git commit --amend★☆☆最も安全
過去のコミット(未プッシュ)git rebase -i HEAD~n★★☆rewordを使う
直前のコミット(プッシュ済み)amend + force push★★☆共有ブランチは注意
過去のコミット(プッシュ済み)rebase + force push★★★チームに要確認

覚えておきたい重要ポイント

  • コミットメッセージ変更は「新しいコミットで置き換える」仕組み
  • 直前のコミットは git commit --amend で簡単に変更
  • 過去のコミットは git rebase -i のインタラクティブリベースを使う
  • プッシュ済みの場合は --force-with-lease で安全にフォースプッシュ
  • 共有ブランチの履歴書き換えは慎重に、チームメンバーへの影響を考慮
  • エディタはVS Codeなど使いやすいものに変更できる

最後に:日頃からの心がけ

コミットメッセージを後から変更する方法を知っておくことは大切ですが、最初から良いメッセージを書く習慣を身につけることが何より重要です。

  • コミット前に一度メッセージを見直す
  • チームの規約を確認する
  • プレフィックスやチケット番号を忘れない
  • 分かりやすく簡潔に書く

この記事で紹介した方法を使えば、コミットメッセージの間違いを恐れる必要はありません。でも、最初から丁寧に書く習慣があれば、変更の手間も減らせます。

あなたのGit操作がより快適になることを願っています!

コメント

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