プルリクエストとマージリクエスト


468

プルリクエストとマージリクエストの違いは何ですか。

Githubではそれはプルリクエストであり、例えばGitLabではそれはマージリクエストです...これらの両方の間に違いはありますか?

回答:


765

GitLabの「マージ要求」機能は、GitHubの「プル要求」機能と同等です。どちらも、変更を別のブランチまたはフォークからブランチにプルし、その変更を既存のコードとマージする手段です。これらは、コードのレビューと変更管理に役立つツールです。

GitLab記事では、機能の命名の違いについて説明しています。

マージまたはプルリクエストはgit管理アプリケーションで作成され、割り当てられた人に2つのブランチをマージするよう依頼します。GitHubやBitbucketなどのツールは、最初の手動アクションが機能ブランチをプルすることになるため、プルリクエストの名前を選択します。GitLabやGitoriousなどのツールは、名前のマージ要求を選択します。これは、譲受人に要求される最後のアクションであるためです。この記事では、それらをマージリクエストと呼びます。

「マージ要求」とgit mergeコマンドを混同しないでください。「プルリクエスト」をgit pullコマンドと混同しないでください。両方のgitコマンドは、プルリクエストとマージリクエストの両方で背後で使用されますが、マージ/プルリクエストは、これら2つのコマンドよりもはるかに広いトピックを参照します。


1
プルリクエストが行われると、GitHubは中間/一時的なブランチ(非表示)を作成しますか?
Robert Koritnik

1
@stevemaoにアクセスできますか?競合を解決できるので、それらは本当に読み取り専用ですか?
Robert Koritnik

11
何が欠けていますか?プル=フェッチ+マージ。最後のアクションがマージの場合、最初のアクションをフェッチする必要があります。
Vytenis Bivainis 2017

61
MRは、すべての周りでちょうど良い名前です。最初のアクションであるという説明を読むまでは、プルリクエストは意味がありませんでした。「こんにちは、このコードをマスターブランチにマージしてください。」「こんにちは。<暗黙のマージ>のこのコードを非表示のブランチにプルできますか?」-ここには明確な勝者がいます。
グラニトサウルス

7
@グラニトサウルス同意。gitの初心者として、プルリクエストは、私が期待していたものとはまったく異なりました。Gitlabを使い始めたとき、マージ要求はすぐに理にかなっています。
Mark Lyons

54

彼らは同じ機能です

マージまたはプルリクエストはgit管理アプリケーションで作成され、割り当てられた人に2つのブランチをマージするよう依頼します。GitHubやBitbucketなどのツールは、最初の手動アクションが機能ブランチをプルすることになるため、名前のプルリクエストを選択します。GitLabやGitoriousなどのツールは、名前のマージ要求を選択します。これは、譲受人に要求される最後のアクションであるためです。この記事では、それらをマージ要求と呼びます。

- https://about.gitlab.com/2014/09/29/gitlab-flow/


マージは、新機能を追加する開発者の責任ではありませんか?開発者Aがfeature_branchに機能を追加した場合、マスターブランチを取得して自分のブランチの上にマージし、すべての競合を解決して、マージリクエストを作成する前にテストする必要がありますか?
Ciasto piekarz 2018年

2
はい。ただし、コードをマスターするために誰かがその後に実行しなければならない早送りマージがまだあります。実際、私はフルタイムの開発者のチームでは、機能の開発者もマージするのが最善の方法だと思いますが、誰かが最初にPRをレビューするのを待つのが役立つかもしれません。
bdsl

21

私の見解では、これらは同じアクティビティを意味しますが、異なる観点からです。

考えてみてください。アリスは、ボブのリポジトリBから分岐されたリポジトリAにいくつかのコミットを行います。

アリスが自分の変更をBに「マージ」したい場合、実際にはボブにAからこれらの変更を「プル」してもらいたいと思っています。

したがって、アリスの観点からは、それは「マージ要求」であり、ボブはそれを「プル要求」と見なします。


他の同僚にgitがどのように機能するかを知らせるために小さなレポートを作成したときの例を思い出しました。
Ravi Yadav

4

紛争管理に関しては微妙な違いがあります。競合が発生した場合、Githubでのプルリクエストにより、宛先ブランチでマージコミットが行われます。Gitlabでは、競合が検出されると、ソースブランチのマージコミットで変更が行われます。

https://docs.gitlab.com/ee/user/project/merge_requests/resolve_conflicts.htmlを参照してください

「GitLabは、ターゲットブランチに自動的にマージされないマージコミットをソースブランチに作成することで競合を解決します。これにより、変更がマージされる前にマージコミットを確認およびテストできるため、意図しない変更がレビューまたは中断せずにターゲットブランチに入るのを防ぎます。ビルド。」


3

GitLab 12.1(2019年7月)では違いが導入されています。

機密問題のマージ要求

セキュリティの脆弱性などの機密問題について話し合い、計画し、解決する場合、Gitリポジトリが公開されているため、オープンソースプロジェクトの効率を維持することは特に困難です。

https://about.gitlab.com/images/12_1/mr-confidential.png

12.1以降、パブリックプロジェクトの機密問題は、機密のマージ要求の作成ボタンを使用して合理化されたワークフロー内で解決できるようになりました。これにより、プロジェクトのプライベートフォークでマージ要求を作成できます。

問題58583の機密の問題」を参照してください。

GitHubにも同様の機能がありますが、「メンテナセキュリティアドバイザリ」と呼ばれる特別なプライベートフォークの作成が含まれます。


0

以前の回答で述べたように、どちらもほぼ同じ目的を果たします。個人的に私はgit rebaseとマージリクエストが好きです(gitlabのように)それはレビューア/メンテナの負担を取り除き、マージリクエストを追加している間、機能ブランチが作成された後、機能ブランチがメインブランチで行われたすべての最新のコミットを確実に含むようにします。以下は、リベースを詳細に説明する非常に役立つ記事です。https//git-scm.com/book/en/v2/Git-Branching-Rebasing

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.