[GitHub] Pull RequestのBaseブランチが自動で変更されるようになっていた

2021.09.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部 IoT事業部の若槻です。

GitHubで、Pull RequestのBaseブランチが自動で変更されるようになっていたため、動作をまとめてみました。

先にまとめ

どういうことかと言うと、下記の1から4を経た場合に、5でBaseブランチが自動で親ブランチに変更されるため便利だという話です。

  1. ブランチの参照関係がdevelop(親) -> feature1(子) -> feature2(孫)となっている
  2. developをBaseとしてfeature1のPull Requestを作成する
  3. feature1をBaseとしてfeature2のPull Requestを作成する
  4. feature1developにマージして削除する
  5. feature2のPull RequestのBaseブランチが自動でdevelopに変更される

ある日の開発風景(1〜3)

前述のまとめの1〜3に該当する部分です。

デフォルトブランチ(develop)から作業用ブランチ(feature1)を切って開発作業を行いました。

作業が終わったので、feature1のPull Requestを作成してレビューを依頼します。

そしてレビューを待っている間に、さらにfeature1からfeature2を切って別の開発作業を行いました。この時の各ブランチの参照関係は下記のようになります。

  • develop(親) -> feature1(子) -> feature2(孫)

feature2の作業も早々と終わり、これのPull Requestも作成しようとしました。しかしこの時点でfeature1のPull Requestのレビューがまだ終わっておらずdevelopに未マージの状態でした。そのためfeature2のBaseブランチをdevelopとするとPull Requestにfeature1の変更まで混入してしまいます。

Pull Requestはマージ先(base)とマージ元(head)のブランチの差分により作られるため当然といえば当然ですが、これではレビュー時に不都合です。

そこでBaseブランチを直接の参照先であるfeature1とすることにより、feature2のPull Requestにはfeature2の変更のみ含めるようにしました。

子ブランチを親ブランチにマージして削除(4〜5)

前述のまとめの4〜5に該当する部分です。

feature1のPull Requestのレビューが完了したため、feature1developにマージしました。

この時点ではfeature2のPull Requestには何も変化はありません。

マージしたfeature1を削除します。

するとfeature2のPull RequestのBaseブランチがdevelopに自動で変更されました。

Base automatically changed from feature1 to developという履歴も記録されています。

おわりに

以前まではこのような自動変更は無かったと思うのですが、いつの間にか機能追加されていたようです。(前述の1〜3があまりないパターンだったため気づかなかったようです。)

今後はPull Requestに下記のような書き置きをする必要は無くなりました。

以上