1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitHub デフォルトブランチへの誤マージを防止する

1
Posted at

はじめに

GitHub で運用しているときに PR のマージ先を変更し忘れてデフォルトブランチへの誤マージが発生することがあると思います。
これを防止するためにはどうするのがいいのでしょうか。

1. 保護ブランチにする

保護ブランチにすればレビューや CI のチェックを必須にできます。
Settings > Branches > Branch protection rules から設定できます。

レビューした人がマージ先を確認し忘れるとマージされてしまいます。

2. マージできる権限を絞る

そもそもよく分かっていない人がマージできてしまうのはよくないのでマージできる人を絞ります。
組織だとチームが作れると思うのでチームを分類してそれぞれに適切な権限を付けます。
Settings > Manage access から管理できます。

こちらもマージする人がマージ先を確認し忘れるとマージされてしまいます。

3. develop ブランチを設定する

開発用ブランチが develop ブランチ 1 本しかないならそちらをデフォルトブランチに設定します。

間違ってマージしてしまっても revert するチャンスは多いのでさほど問題にならない気がします。

4-1. ダミーブランチを設定する

ダミーブランチとして default ブランチ(名前は何でもいいです)をデフォルトブランチに設定します。
PR を作るときに常にマージ先を変更する手間を挟むことでそもそも master へ PR を送るのを防止します。

間違ってマージしてしまってもプロダクトに影響はありません。
ただし誤マージに気付かないと闇に葬られてしまうので注意が必要です。

開発用ブランチが複数あって並行で開発が進んでいる場合にどのブランチを設定するか迷うことがあります。
そうなると master ブランチがデフォルトブランチになりがちです。
develop ブランチであれば誤マージされても影響が少なくても master ブランチだとそうもいかないことが多いので代わりにダミーブランチを設定します。

4-2. master に追従するダミーブランチを設定する

ダミーブランチを作るだけだと段々 master と乖離して PR を作るときに差分が多くなり重くなってしまいます。
そこで master ブランチに追従させます。

ブランチを追従させる GitHub Actions

default ブランチは予め作っておきます。

.github/workflows/follow_branch.yml
name: Follow branch

on:
  push:
    branches: master

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - run: git fetch --no-tags --prune --unshallow
    - run: git checkout -B default origin/default
    - run: git merge --ff-only origin/master
    - run: git push origin default

マージを fast-forward only にすることで誤マージが発生したときにこのアクションがエラーになってくれるので気付けます。

おわりに

自分が知っているのはこの 4 つ(の組み合わせ)くらいなんですがみなさんどうしてるんでしょうか。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?