starfish

I'm Multistack Engineer.

gitでmasterにpushできないようにする

2020-04-29git

プルリクエスト駆動開発なのに、間違えてmasterにpushしてしまったことは無いですか?僕はあります。

こうなってしまったらforce pushなどで歴史改変をしないといけなくなるので非常に面倒です。

これを防ぐために、push前に気付くようにしましょう。

  • pre-pushファイルを作成する

    • master、developへのpushを禁止する
    • ローカルリポジトリの .git\hookspre-push というファイル名でファイルを作成し、以下のコードを保存する
#!/bin/bash

while read local_ref local_sha1 remote_ref remote_sha1
do
  if [[ "${remote_ref##refs/heads/}" = "master" ]]; then
    echo "Do not push to master branch!!!"
    exit 1
  elif [[ "${remote_ref##refs/heads/}" = "develop" ]]; then
    echo "Do not push to develop branch!!!"
    exit 1
  fi
done
  • masterにpushしようとすると Do not push to master branch!!! と警告が出る
  • elif で条件を増やせば、push禁止のブランチを増やすことができる
  • GitHubを使っているのであれば、ブランチのprotect設定を行うことでpushを制限することができます