Masteries

技術的なことや仕事に関することを書いていきます.

Gitで特定のbranchのみcommit/push出来ないようにする

小ネタです. Gitで開発をしていて, 特定のbranchのみcommit/pushしたくない, という場合があるかと思います. 例えばmainブランチにはcommit/pushしたくない, など.

これを実現するには様々な方法がありそうですが, 自分はGitのhookの機能を使って実現しています. 今回の場合, 「commitしたくない」を実現するためにcommit前に発火するpre-commitのhookを, 「pushしたくない」を実現するためにpush前に発火するpre-pushのhookを使えば良さそうです. 例として, mainブランチについてcommit/pushをしたくないという場合には, 次のようなスクリプトを設置するとうまくいきます(commit/pushしようとすると, メッセージを出力した上で強制的に中止してくれます).

.git/hooks/pre-commit

#!/bin/sh
# mainブランチにはcommitできない
if test "`git symbolic-ref HEAD | sed -e 's:^refs/heads/::'`" = 'main'; then
    echo "cannot commit on main branch."
    exit 1
fi

.git/hooks/pre-push

#!/bin/sh
# mainブランチにはpushできない
if test "`git symbolic-ref HEAD | sed -e 's:^refs/heads/::'`" = 'main'; then
    echo "cannot push on main branch."
    exit 1
fi

あわせてよみたい

papix.hatenablog.com