コミットメッセージの変更
コミットメッセージに不明確、不正確、または機密情報が含まれている場合、ローカルでメッセージを修正して、GitHub Enterpriseに新しいメッセージで新しいコミットをプッシュできます。 また、コミットメッセージを変更して、不足している情報を追加することも可能です。
直近のコミットメッセージの書き換え
git commit --amend
コマンドで、直近のコミットメッセージを変更できます。
Git では、コミットメッセージのテキストはコミットの一部として扱われます。 コミットメッセージを変更すると、コミット ID (コミットの SHA1 チェックサム) も変更されます。 実質的には、古いコミットに代わる新しいコミットを作成することになります。
オンラインにプッシュされていないコミット
コミットがローカルリポジトリにのみ存在し、使用している GitHub Enterprise Serverインスタンスにプッシュされていない場合、git commit --amend
コマンドでコミットメッセージを修正できます。
- コマンドラインで、修正したいコミットのあるリポジトリに移動します。
git commit --amend
と入力し、Enter を押します。-
テキストエディタでコミットメッセージを編集し、コミットを保存します。
- コミットにトレーラーを追加することで、共作者を追加できます。 詳しい情報については「複数の共作者を持つコミットの作成」を参照してください。
次回のプッシュ時に、使用している GitHub Enterprise Serverインスタンスに新たなコミットとメッセージが表示されます。
Git で使うデフォルトのテキストエディタは、core.editor
の設定で変更できます。 詳しい情報については、Git のマニュアルにある「基本クライアント設定」を参照してください。
古いまたは複数のコミットメッセージの修正
すでにコミットを 使用している GitHub Enterprise Serverインスタンスにプッシュしている場合、修正済みのメッセージでコミットをフォースプッシュする必要があります。
リポジトリの履歴が変更されるため、フォースプッシュは推奨されません。 フォースプッシュを行った場合、リポジトリをすでにクローンした人はローカルの履歴を手動で修正する必要があります。 詳しい情報については、Git のマニュアルにある「上流リベースからのリカバリ」を参照してください。
直近にプッシュしたコミットのメッセージ修正
-
上記の手順に従って、コミットメッセージを修正します。
-
push --force
コマンドにより、古いコミットをフォースプッシュで上書きします。$ git push --force example-branch
古いまたは複数のコミットメッセージの修正
複数のコミットまたは古いコミットの、メッセージを修正する必要がある場合は、インタラクティブなリベースを利用した後にフォースプッシュして、コミットの履歴を変更できます。
-
コマンドラインで、修正したいコミットのあるリポジトリに移動します。
-
git rebase -i HEAD~n
コマンドで、デフォルトのテキストエディタに直近n
コミットの一覧を表示できます。$ git rebase -i HEAD~3 # Displays a list of the last 3 commits on the current branch
一覧は以下のように表示されます:
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
-
各コミットメッセージを変更する前に、
pick
をreword
に置換してください。pick e499d89 Delete CNAME reword 0c39034 Better README reword f7fde4a Change the commit message but push the same commit.
-
コミット一覧のファイルを保存して閉じます。
-
生成された各コミットコミットファイルに、新しいコミットメッセージを入力し、ファイルを保存して閉じます。
-
修正したコミットをフォースプッシュします。
$ git push --force
インタラクティブリベースに関する詳しい情報については、Git のマニュアルにある「インタラクティブモード」を参照してください。
この方法でも、コミットメッセージを修正すると、ID が新しい新たなコミットメッセージが作成されます。 ただしこの方法では、修正したコミットに続く各コミットも新しい ID を取得します。各コミットには、親の ID が含まれているためです。
修正したコミットをフォースプッシュしても元のコミットは GitHub Enterpriseから削除されない場合がありますので、元のコミットメッセージに機密情報が含まれている場合は注意してください。 古いコミットは、以降のクローンには含まれませんが、GitHub Enterpriseにキャッシュされ、コミット ID でアクセスできます。 リモートリポジトリから古いコミットメッセージをパージするには、古いコミット ID を添えて GitHub Enterprise サイト管理者にお問い合わせください。