状況
リモート名とブランチ名を省略した git push
コマンドは、(git config の push.default
設定によるが)適切なリモートとブランチを補ってプッシュを実行する。たとえば upstream が origin/foo ブランチに設定された foo ブランチで git push
を実行すると origin/foo にプッシュする。
この挙動を特定のブランチでだけ禁止したい。具体的には、誤操作を防ぐために master ブランチでだけ git push
を禁止して、明示的な git push origin master
だけを許可したい。
解法
リモート名を省略した場合に補われるリモートを存在しない名前にすればよい。 branch.<name>.pushRemote
を以下のように設定する。
git config branch.master.pushRemote 'dont-push-master!!!'
git push
すると存在しないリモートにプッシュしようとして期待通りエラーになる。