私たちのビジネスでは、次のセットアップ(非常に簡略化されたバージョン)があり、かなり標準的です。
- フックを介してライブ環境を更新するマスターブランチ。
- QA、UAに使用されるテストブランチ。同じ方法でテスト環境を更新します。
リポジトリはGitHubでホストされています。
ワークフローは通常次のとおりです。
- マスターから引っ張る
- 特定のチケットで作業するためのブランチ(Ticket1など)を作成します
- 作業を行い、ローカルでテストします
- ブランチTicket1をコミットしてプッシュする
- githubのプルリクエストを介してTicket1をテストにマージします。これにより、ピアコードレビューなどを行うことができます。
とても標準的です。時々遭遇するテストブランチにプルリクエストを行うとき、プルリクエストで、githubは開発者によって行われたと思われるコミットよりも多くのコミットを表示します。調査の結果、それが発生したときに少なくとも1つの特定のケース(これが唯一のケースではない可能性があります)に気づきました。
- 開発者Aは、テストにいくつかの変更を加え、QAとUAに合格し、マスターとマージされます。
- 開発者Bはさらにいくつかの変更を加えます。マスターとマージするとき、競合があります。開発者Bは競合を解決し、IDが1234567などの新しいコミットで競合の修正をコミットします。
- 開発者Aは別のチケットの作成を開始します。マスターからプルし(したがって1234567コミットをプルします)、ブランチを作成し、コミットし、プッシュします。GitHubでプルリクエストを行ってブランチをテストにマージすると、GitHubはコミットと1234567をマージしたいと考えます。彼はその特定のコミットについて何も知らないので、それは彼を怖がらせます。
私は同様の質問を検索しましたが、少なくとも次のことを見つけました。
- GitHubプルリクエストに2つのコミットがあるのはなぜですか?
- フォークされたリポジトリのマスターブランチで最新のコミットのみを使用してGitHubでプルリクエストを実行する方法
- 最新のコミットについてのみ、GitHubでプルリクエストを送信します
彼らはコマンドラインソリューションを扱いました(基本的には「rebase」を使用)。しかし、彼らは私たちの根本的な問題を扱っていません。それは、それが起こらないようにする方法です。なぜそれが起こるのか、つまりいつ起こるのかを知りたいのですが、ワークフローに根本的な欠陥があるのか、githubがプルリクエストを作成する方法に関する何かが欠けているのかはわかりません。
確かに、これは以前にあなたに起こったに違いありません。どのように対処しますか?