チュートリアルGit のコミットメッセージを更新する方法

ブランチに何度かコミットした後で、ひとつあるいは複数のコミットメッセージを更新する必要があることに気づくこともあるでしょう。タイプミスを見つけたり、自動コミット機能がプロジェクトのコミットメッセージガイドラインにそぐわないことを警告してきたりしたからです。

コマンドラインインターフェイス(CLI)から Git を使う練習をあまりしていないと、メッセージの更新は厄介かもしれません。GitLab の UI でしか作業したことがない人でも、CLI を使う手順を説明するので心配しないでください。

このチュートリアルでは、どちらの場合でもコミットメッセージを書き換える方法を説明します:

  • GitLab UI だけで作業する場合は、手順 1 から始めましょう。
  • すでにローカルにリポジトリをクローンしている場合は、ステップ 2 に進んでください。

任意の数のコミットメッセージを書き換えるには

  1. プロジェクトのリポジトリをローカルマシンにクローンします。
  2. ブランチを取得し、ローカルでチェックアウトします。
  3. コミットメッセージを更新します。
  4. GitLab に変更をプッシュします。

前提条件

必須

  • GitLab プロジェクトで、更新したいコミットを含む Git ブランチ。
  • ローカルマシンにインストールされた Git。
  • ローカルマシンのコマンドラインインターフェイスにアクセスする機能(CLI)。MacOS では Terminal を使います。Windows では PowerShell を使うことができます。Linuxユーザーは、システムのCLIにすでに慣れているでしょう。
  • システムのデフォルトのエディタに慣れていること。このチュートリアルでは、お使いのエディタが Vim であることを前提としていますが、どのテキストエディタでも動作するはずです。Vim に慣れていない場合は、Vim を使い始めるのステップ 1 から 2 で、このチュートリアルで使用するすべてのコマンドを説明しています。
  • コミットメッセージの上書き権限。同じブランチで複数の人と作業している場合は、まずその人たちにコミットを更新していいかどうかを確認する必要があります。組織によっては、コミットを書き換えてはいけないというルールがあるかもしれません。

最後のステップでコミットメッセージを上書きするには、GitLab で認証する必要があります。GitLab アカウントが基本的なユーザー名とパスワードによる認証を使っている場合、CLI から認証を行うには二要素認証 (2FA)を無効にしておく必要があります。あるいは、SSHキーを使ってGitLabで認証することもできます。

リポジトリをローカルマシンにクローンします。

最初にすべきことは、ローカルマシンにリポジトリを取得することです:

  1. GitLab のプロジェクトの概要ページで、右上のClone を選択します。
  2. ドロップダウンリストで、リポジトリの URL をコピーします:
    • GitLab アカウントが基本的なユーザー名とパスワード認証を使用している場合は、HTTPS でクローンします。
    • GitLabの認証にSSHを使用している場合は、SSHでクローンします。
  3. ローカルマシンの CLI (Terminal や PowerShell など) に切り替えて、リポジトリをクローンしたいディレクトリに移動します。たとえば、/users/my-username/my-projects/.
  4. git clone を実行し、先ほどコピーした URL を貼り付けます:

    git clone https://gitlab.com/my-username/my-awesome-project.git
    

    これでリポジトリがmy-awesome-project/ という新しいディレクトリにクローンされます。

これで、リポジトリがあなたのコンピューターにできあがり、Git CLI コマンドを使えるようになりました!

ブランチを取得し、チェックアウトします。

次に、更新するコミットが含まれるブランチをチェックアウトする必要があります。

  1. CLI が前のステップと同じ場所にあると仮定して、プロジェクトディレクトリにcd

    cd my-awesome-project
    
  2. オプション。リポジトリをクローンしたばかりの場合は、ブランチもすでにコンピューター上にあるはずです。しかし、以前にリポジトリをクローンしていてこのステップまでスキップした場合は、ブランチを取得する必要があるかもしれません:

    git fetch origin my-branch-name
    
  3. ブランチがローカルにあることがわかったので、そちらに移動します:

    git checkout my-branch-name
    
  4. 正しいブランチであることをgit log で確認し、最新のコミットが GitLab 上のブランチのコミットと一致していることを確認します。ログを終了するには、q.

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

コミットメッセージを更新する準備ができました:

  1. GitLab で、コミット履歴のどこまで遡る必要があるのかを確認しましょう:

    • ブランチに対してすでにマージリクエストをオープンしている場合は、「コミット」タブでコミットの総数を確認することができます。
    • ブランチだけで作業している場合は
      1. コード > コミットに進みます。
      2. 左上のドロップダウンリストを選択し、ブランチを探します。
      3. 更新したい一番古いコミットを探し、そのコミットがどれくらい前にあるのかを数えます。たとえば、2 番目と 4 番目のコミットを更新したい場合は 4 となります。
  2. CLI から対話的なリベースを開始します。これは、コミットを更新する Git のプロセスです。前のステップのコミット数をHEAD~ の最後に追加します:

    git rebase -i HEAD~4
    

    この例では、Git はブランチの直近のコミットを四つ選んで更新します。

  3. Git はテキストエディタを起動し、選択したコミットを一覧表示します。たとえば、次のようになります:

    pick a0cea50 Fix broken link
    pick bb84712 Update milestone-plan.md
    pick ce11fad Add list of maintainers
    pick d211d03 update template.md
       
    # Rebase 1f5ec88..d211d03 onto 1f5ec88 (4 commands)
    #
    # Commands:
    # p, pick <commit> = use commit
    # r, reword <commit> = use commit, but edit the commit message
    # e, edit <commit> = use commit, but stop for amending
    # s, squash <commit> = use commit, but meld into previous commit
    # f, fixup [-C | -c] <commit> = like "squash" but keep only the previous
    #                    commit's log message, unless -C is used, in which case
    # [and so on...]
    
  4. このpick コマンドは、Git にコミットをそのまま使うように指示 pickします。更新したいコミットのpick コマンドを pick rewordpick 変更しなければ pickなりません。i と入力してINSERT モードに入り、テキストの編集を開始します。

    たとえば、上のサンプルの二番目と四番目のコミットのテキストを更新するには、次のように編集します:

    pick a0cea50 Fix broken link
    reword bb84712 Update milestone-plan.md
    pick ce11fad Add list of maintainers
    reword d211d03 update template.md
    
  5. 編集したテキストを保存します。Escape を押してINSERT モードを終了し、INSERTEnter を入力して保存して終了します。

  6. Git はそれぞれのコミットを一度に調べ、選択したコマンドを適用します。pick を含むコミットは、変更されずにブランチに追加されます。Git はreword を含むコミットに到達すると停止し、再びテキストエディタを開きます。いよいよコミットメッセージのテキストを更新します!

    • 一行だけのコミットメッセージが必要な場合は、必要に応じてテキストを更新しましょう。たとえば

       Update the monthly milestone plan
      
    • コミットメッセージにタイトルと本文が必要な場合は、空白行で区切ります。例えば

       Update the monthly milestone plan
            
       Make the milestone plan clearer by listing the responsibilities
       of each maintainer.
      

    保存して終了すると、Git はコミットメッセージを更新し、次のコミットを順に処理します。終了すると、Successfully rebased and update refs/heads/my-branch-name というメッセージが表示されるはずです。

  7. オプションです。コミットメッセージが更新されたことを確認するには、git log を実行し、スクロールダウンしてコミットメッセージを確認します。

GitLab に変更をプッシュします。

さて、あとはこれらの変更を GitLab にプッシュするだけです:

  1. CLI から変更を強制的にプッシュし、GitLab のブランチにある変更を上書きします。

    git push -f origin
    

    GitLab のコミットメッセージを上書きする前に、ターミナルからユーザー名とパスワードの入力を求められるかもしれません。

  2. GitLab のプロジェクトで、コミットが更新されていることを確認しましょう:

    • ブランチに対してすでにマージリクエストが開かれている場合は、「コミット」タブをチェックしましょう。
    • ブランチだけで作業している場合は
      1. コード > コミットに進みます。
      2. 左上のドロップダウンリストを選択し、ブランチを探します。
      3. リストの該当コミットが更新されていることを確認します。

これで、コミットメッセージの更新と GitLab へのプッシュが完了しました!