5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

多くの開発者が経験する共通の問題—間違ったブランチに不注意にコミットしてしまうこと。今回はそれの解決策の一つとして、Git Hooksを利用して、コミット前にブランチを明示的に確認させる方法を解説します。

Git Hooksとは?

Git Hooksは、Gitのワークフロー中の特定のポイントで自動的に実行されるスクリプトです。コミット、プッシュ、マージなど、様々なGitイベントにフックできます。これにより、開発プロセスに追加の検証や自動化を導入できます。

実装手順

1. プロジェクトの準備

# 新しいプロジェクトディレクトリを作成
mkdir git-branch-confirmation
cd git-branch-confirmation

# Gitリポジトリを初期化
git init

# Gitのブランチmainを作成しコミットする
git switch -c main
echo "test" > test.txt
git add test.txt
git commit -m "test"

2. pre-commitフックの設定

# hooksディレクトリに移動
cd .git/hooks

# pre-commitスクリプトを作成
touch pre-commit

# スクリプトに実行権限を付与
chmod a+x pre-commit

3. pre-commitスクリプトの実装

以下のBashスクリプトをpre-commitファイルに追加します:

# ブランチ確認プロンプト関数
prompt_confirmation() {
    local CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
    
    while true;
    do
        echo "===== ブランチ確認 ====="
        echo "現在のブランチ: $CURRENT_BRANCH"
        echo "本当にこのブランチ『$CURRENT_BRANCH』にコミットしますか?"
        echo "操作を続行するには「yes」、中止するには「no」と入力してください。"
        
        exec < /dev/tty
        read -r CONFIRM
        
        # 入力を小文字に変換
        CONFIRM_LOWER=$(echo "$CONFIRM" | tr '[:upper:]' '[:lower:]')
        
        # 確認応答の処理
        case "$CONFIRM_LOWER" in
            "y" | "yes")
                echo "コミットを続行します。"
                return 0
                ;;
            "n" | "no")
                echo "コミットをキャンセルしました。"
                return 1
                ;;
            *)
                echo "エラー: 「yes」または「no」で回答してください。"
                ;;
        esac
    done
}

# 確認関数を呼び出し
if ! prompt_confirmation; then
    exit 1
fi

# ユーザーが確認したら、コミットを許可
exit 0

たったこれだけで完成です!!

  • このスクリプトは、コミット前に現在のブランチを明示的に確認させます。
  • 入力は大文字/小文字を区別しません。
  • ユーザーに「yes」または「no」で明確な選択を求めます。

動作確認

1. コミットするファイルの作成

echo "test" > test1.txt
git add test1.txt

2. コミットをして動作するのかを確認

git commit -m "test1"
===== ブランチ確認 =====
現在のブランチ: main
本当にこのブランチ『にコミットしますか?
操作を続行するには「yes」、中止するには「no」と入力してください。
y
コミットを続行します。

おわりに

Gitでコミットするブランチを間違えるという事はよっぽどのことがないと、あり得ないと思いますが、上記のような形でhooksを使用すると簡単に防ぐことができます。他のGitのワークフローにも活用できるので、是非hooksを活用してみてはどうでしょうか?

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?