【Git】コミットハッシュで任意のコミットのメッセージを変更するスクリプト

  • 2023年10月27日
  • Git

 しばしばGitのコミットメッセージを変更したいことがあります。リモートリポジトリにプッシュした後は複数人間の不整合を少しでも避けるため滅多に変更しないのですが、プッシュ前のコミットが手元にいくつか残っている時は割と変えたくなります。多くのGUI付きのGitの関連ツールはその画面から任意のコミットのメッセージを変更できるのですが、コンソールからは意外と面倒です。この面倒を解決するためのスクリプトを紹介します。

 コミットとメッセージを用意すれば、メッセージ変更手順を自動で行ってくれるスクリプトを作ります。具体的なコードは次です。

#!/bin/bash

# 引数の数が2でなければヘルプを表示して終了
if [ "$#" -ne 2 ]; then
    echo "使い方: $0 [変更したいコミットのハッシュ] [メッセージ]"
    exit 1
fi

# 最初の引数をCOMMIT_HASHに、2つ目の引数をNEW_MESSAGEに代入
COMMIT_HASH=$1
NEW_MESSAGE=$2
# 指定されたコミットの親コミットのハッシュを取得
PARENT_HASH=$(git rev-parse "${COMMIT_HASH}"^)

# rebase時のエディタをsedにして、指定されたコミットを自動で編集モードに変更
# rebase時はどのコミットをどうするかを指定するので、それを制御する
export GIT_SEQUENCE_EDITOR="sed -i -e '/^pick ${COMMIT_HASH:0:7}/s/pick/edit/'"

# 親のハッシュを起点にインタラクティブrebaseを開始
# rebase時にはrebaseの引数に指定したハッシュに連なるコミットが表示される
git rebase -i "$PARENT_HASH"

# ここでGIT_SEQUENCE_EDITORが効いて、このスクリプトの引数で指定したコミットが編集モードになる

# コミットメッセージを新しいメッセージに変更
git commit --amend -m "$NEW_MESSAGE"

# 処理を解決する
git rebase --continue

 次のように使えます。

$ bash ./recomment.sh
使い方: ./recomment.sh [変更したいコミットのハッシュ] [メッセージ]
$ bash ./tmp.sh 7e7a7a07953b4bc46d42f6430d400dd8c7a07ead "メッセージ変更テスト変更後"
Stopped at 7e7a7a0...  メッセージ変更テスト変更前
You can amend the commit now, with

  git commit --amend

Once you are satisfied with your changes, run

  git rebase --continue

> pre-commit
> node gitHooks/preCommit.cjs

---run preCommit.js---
[]
---end preCommit.js---
[detached HEAD 0bd43e7] メッセージ変更テスト変更後
 Date: Fri Oct 27 10:29:51 2023 +0900
 1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/develop.

 こうするとコンソールでも簡単にコミットメッセージを変えられるようになります。手を進めるにつれてメッセージの内容が不適切であったとわかったり、プッシュ前にコミットメッセージの誤字脱字に気づいたりなどした時に使うと便利です。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG