Skip to main content

コミットメッセージの変更

コミットメッセージに不明確、不正確、または機密情報が含まれている場合、ローカルでメッセージを修正して、GitHubに新しいメッセージで新しいコミットをプッシュできます。 また、コミットメッセージを変更して、不足している情報を追加することも可能です。

直近のコミットメッセージの書き換え

git commit --amend コマンドで、直近のコミット メッセージを変更できます。

Git では、コミットメッセージのテキストはコミットの一部として扱われます。 コミット メッセージを変更すると、コミット ID (コミットの SHA1 チェックサム) も変更されます。 実質的には、古いコミットに代わる新しいコミットを作成することになります。

オンラインにプッシュされていないコミット

コミットがローカル リポジトリにのみ存在し、GitHub.com にプッシュされていない場合、git commit --amend コマンドでコミット メッセージを修正できます。

  1. コマンドラインで、修正したいコミットのあるリポジトリに移動します。
  2. git commit --amend」と入力して Enter キーを押します。
  3. テキストエディタでコミットメッセージを編集し、コミットを保存します。

次回のプッシュ時に、GitHub.com に新たなコミットとメッセージが表示されます。

Git で使うデフォルトのテキスト エディタは、core.editor の設定で変更できます。 詳しい情報については、Git のマニュアルにある「基本クライアント設定」を参照してください。

古いまたは複数のコミットメッセージの修正

すでにコミットを GitHub.com にプッシュしている場合、修正済みのメッセージでコミットをフォース プッシュする必要があります。

リポジトリの履歴が変更されるため、フォースプッシュは推奨されません。 フォースプッシュを行った場合、リポジトリをすでにクローンした人はローカルの履歴を手動で修正する必要があります。 詳しい情報については、Git のマニュアルにある「上流リベースからのリカバリ」を参照してください。

直近でプッシュされたコミットのメッセージを変更する

  1. 上記の手順に従って、コミット メッセージを修正します。

  2. push --force-with-lease コマンドにより、古いコミットをフォース プッシュで上書きします。

    git push --force-with-lease origin EXAMPLE-BRANCH
    

古いまたは複数のコミット メッセージを変更する

複数のコミットまたは古いコミットの、メッセージを修正する必要がある場合は、インタラクティブなリベースを利用した後にフォースプッシュして、コミットの履歴を変更できます。

  1. コマンドラインで、修正したいコミットのあるリポジトリに移動します。

  2. git rebase -i HEAD~n コマンドで、デフォルトのテキスト エディタに直近 n コミットの一覧を表示できます。

    # Displays a list of the last 3 commits on the current branch
    $ git rebase -i HEAD~3
    

    リストは、以下のようになります。

    pick e499d89 Delete CNAME
    pick 0c39034 Better README
    pick f7fde4a Change the commit message but push the same commit.
    
    # Rebase 9fdb3bd..f7fde4a onto 9fdb3bd
    #
    # 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
    # x, exec = run command (the rest of the line) using shell
    #
    # These lines can be re-ordered; they are executed from top to bottom.
    #
    # If you remove a line here THAT COMMIT WILL BE LOST.
    #
    # However, if you remove everything, the rebase will be aborted.
    #
    # Note that empty commits are commented out
    
  3. 各コミット メッセージを変更する前に、pickreword に置換してください。

    pick e499d89 Delete CNAME
    reword 0c39034 Better README
    reword f7fde4a Change the commit message but push the same commit.
    
  4. コミット一覧のファイルを保存して閉じます。

  5. 生成された各コミットコミットファイルに、新しいコミットメッセージを入力し、ファイルを保存して閉じます。

  6. 変更を GitHub にプッシュする準備ができたら、push --force コマンドを使用して、古いコミットを強制的にプッシュします。

    git push --force origin EXAMPLE-BRANCH
    

インタラクティブ リベースに関する詳しい情報については、Git のマニュアルにある「インタラクティブ モード」を参照してください。

この方法でも、コミットメッセージを修正すると、ID が新しい新たなコミットメッセージが作成されます。 ただし、この方法では、修正したコミットに続く各コミットも新しい ID を取得します。各コミットには、親の ID が含まれているためです。

修正したコミットをフォースプッシュしても元のコミットは GitHubから削除されない場合がありますので、元のコミットメッセージに機密情報が含まれている場合は注意してください。 古いコミットは、以降のクローンには含まれませんが、GitHubにキャッシュされ、コミット ID でアクセスできます。 リモートリポジトリから古いコミットメッセージをパージするには、古いコミット ID を添えて GitHub サポート ポータルにお問い合わせください。

参考資料