web-dev-qa-db-ja.com

ブランチを開発するプルリクエストで機能ブランチをクリーンに保つ

私はGitLab(プルリクエストではなくマージリクエストと呼んでいます)を使用しています。以下のいくつかのコメントから、GitLabの動作はGitHubの動作と異なる場合があるようです。

コードレビューにプルリクエストを使用すると、(開発者ごとに個別のリモートリポジトリを作成するのではなく)共有リモートリポジトリを使用して機能ブランチで開発している場合に、どのように機能するかを理解しようとしています。

私が見たほとんどのワークフローは、機能ブランチから共有開発ブランチへのプルリクエストについて話しています。

これで私が目にする問題は、機能がリリースされる順序がわからない場合や、実験的な機能がまったくリリースされる場合でもです。したがって、リリースされるまで、機能ブランチを他の機能ブランチからの相互汚染なしに「純粋」に保つ必要があります。

ある機能ブランチから別の機能ブランチへの変更を混在させないために、他の機能がリリースされるまで、開発を機能ブランチにマージしたり、開発で機能ブランチをリベースすることはできません。プルリクエストは、機能ブランチの変更を他の機能ブランチからマージされた変更を含む開発ブランチと比較して、非常に厄介なものになってしまいます。

私が考えることができる唯一の解決策は、機能ブランチのヘッドとその機能ブランチでの以前のプルリクエストからのコミットの間にプルリクエストを作成することです。ただし、GitLab、BitBucket、GitHubなどのほとんどのリポジトリホスティングサービスは、同じブランチで以前のコミットから後のコミットへのプルリクエストをサポートしているとは思いません。

これは一般的な問題であるに違いないので、ここで明らかな何かを見逃しているように感じます。他の人々は、機能ブランチのコードを分離したまま、コードレビューにプルリクエストを使用するというこの問題をどのように解決しますか?

2
Simon Tewsi

あなたのコメントの1つから:

私の理解は、プルリクエストは2つのブランチのヘッドを比較し、feature-1と言って開発します。たとえば、feature-1が開発から分岐されたため、feature-2ブランチが開発にマージされたとします。 feature-1と開発の間でプルリクエストを実行すると、feature-1とfeature-2のすべての変更が表示されます

これは、プルリクエストのしくみとその機能についての単なる誤解にすぎないと思います。

プルリクエストは、あるブランチを別のブランチにマージするためのリクエストです。プルリクエストが示す違いは、「[ターゲットブランチ]と、ブランチをマージした場合の[ターゲットブランチ]のコードの違い」です。

そのため、「開発」と「開発+機能1」の違いがわかります。プルリクエストは、ブランチを作成したとき、他にどのブランチがあるか、またはブランチを開始してから開発時に発生したコミットは関係ありません。今すぐコードをマージした場合に何が変わるかを示しています。

1
Jack