LoginSignup
117
95

More than 3 years have passed since last update.

【Git/GitHub】禁忌:git push ( -f ) origin mainを防ぐ

Last updated at Posted at 2021-03-13

概要

先日、TwitterでGitの取り扱いについてプチバズしていたツイートを発見してその引用RTやリプで

$ git push origin main
$ git push -f origin main

は危険です!と投稿していた人が数人いました。
-fオプションは強制(force)pushを意味します)

もちろん危険なのは言わずもがなですが、ヒューマンエラーは防ぎようがないし、「そもそもちゃんと設定すれば防げるのにいいいい!」と思ったのでサクッとまとめます。

※そのツイートの引用RTやリプでも設定に関して言及しているので現役エンジニアからすると当たり前のことだと思います。

結論

GitHubで簡単に設定できます👌

※色々ググってみるとローカルの.git/hooks以下にpre-pushというファイルを作成してローカル側でリモート(GitHub)のmain(master)ブランチへのpushを禁止する方法が多くヒットしました。が、GitHubで設定できるのでとりあえずGitHubにお任せすれば良いのではないかと思います。

参考までに

この辺の記事を書いている当時はGitHub側での設定機能は無かったみたいですね。

GitHubで禁忌:git push origin (-f) mainを防ぐ設定

1.設定場所に行く

  • GitHubのSettingsタブのBranchesを選択する
  • Add ruleボタンをクリック

スクリーンショット 2021-03-13 9.39.50.png

2.設定項目を入力する

スクリーンショット 2021-03-13 9.45.46.png

Branch name pattern

保護設定を適用するブランチ名を入力するのでmainと入力。

一応パターンなのでfeature/*にするとfeature/○○のブランチ全てに適用できるっぽい。

Require pull request reviews before merging

マージ前にPR(プルリク)のレビューを必須にするかどうかを選択します。
ここにチェックが必要ですね。

Required approving reviews

PRを承認するレビュワーの人数を設定します。(一例として2名にしてます)

※今回の趣旨とは違いますが、参考程度に。

Dismiss stale pull request approvals when new commits are pushed

承認済みのPRに新たにcommitがpushされた時にそのPRの承認を却下します。

※今回の趣旨とは違いますが、大事な設定だと思ったのでピックアップしました。

Include administrators

管理者というかリポジトリのオーナー(今回でいうと私)もこの設定内容を適用するかどうかを選択します。

スクリーンショット 2021-03-13 9.45.54.png

Allow force pushes

force pushを許可するかどうかを選択します。チェックは付けないようにしましょう。
$ git push origin -f mainが可能に...)

Create

ブランチの保護設定を作成して有効にします。

3.作成(設定)後

スクリーンショット 2021-03-13 10.01.09.png

試してみる

git push origin (-f) main実行

  • git push origin main
    スクリーンショット 2021-03-13 10.04.27.png

  • git push -f origin main
    スクリーンショット 2021-03-13 10.04.47.png

どちらも警告が出てpushできません。 ⇒ OK(☝︎ ՞ਊ ՞)☝︎

Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 302 bytes | 302.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: error: GH006: Protected branch update failed for refs/heads/main.
remote: error: At least 2 approving reviews are required by reviewers with write access.
To https://github.com/shimotaroo/test.git
 ! [remote rejected] main -> main (protected branch hook declined)
error: failed to push some refs to 'https://github.com/shimotaroo/test.git'

参考:PR(プルリク)発行

以下コマンドでPRを発行してみる。

$ git switch -c feature/test
$ git add .
$ git commit -m "README.md修正"
$ git push origin feature/test

Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 302 bytes | 302.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'feature/test' on GitHub by visiting:
remote:      https://github.com/shimotaroo/test/pull/new/feature/test
remote:
To https://github.com/shimotaroo/test.git
 * [new branch]      feature/test -> feature/test

ちゃんとpushできたので、GitHub側でPRを作成。

スクリーンショット 2021-03-13 10.12.35.png

先程設定した通りになっていますね。

  • mainにmergeするためにはPRのレビューが必須になっている
  • レビュワーを2名選択しないといけないようになっている

まとめ

ちゃんとGitHubでmainへのpushは禁止しようね。

117
95
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
117
95