GitHubで複数のプルリクエストを開く方法


139

私が開くと、プルリクエストGitHubのを
最後のリクエスト以降のすべてのコミットとすべての新しいコミットがこのリクエストに自動的に追加されます。

追加するコミットと追加しないコミットを制御できないようです。
別のプルリクエストを開こうとすると、「おっと!プルリクエストが既にあります」というエラーが表示されます。

コマンドラインをいじる必要なしに複数のプルリクエストを開く簡単な方法はありますか?

回答:


116

プルリクエストはブランチに基づいています。
複数のコミットのプルリクエストを開く唯一の方法は次のとおりです。

  1. それらを独自のブランチに分離します。
  2. そこからプルリクエストを開きます。

3
それはかっこいい、マスターとだけだと思った。つまり、私は多くのブランチ(つまりgit flow features)を作成し、それぞれにプルリクエストを作成できるということです...試してみる!
Ziyan Junaideen 2013年

8
ブランチが以前のコミットの履歴を保持していることがわかりました。そのため、アップストリームに対するプルリクエストにはまだすべてのコミットが含まれています。
eel ghEEz 2016

2
こんにちは@ eel-gheez、これについて何をすべきか理解しましたか?他のブランチからの変更を表示せずに分離されたPRを作成する方法は?
ジョナサンクロス

3
これは問題を解決しません:PRを作成しようとすると、両方のブランチ(それぞれ少なくとも1つのコミット)が比較されます。何が悪いのですか?
MERose 2016

1
@eelghEEz新しいブランチを作成し、gitでこのブランチに必要なすべてのコミットを選択してから、このブランチからプル要求を行う必要があります。各コミットが以前のコミットに依存することはgitの非常に重要な設計機能であり、gitでのコミットは単なるパッチではなく、これより前にどのパッチが適用されたかを知っているパッチである必要があります。そのため、差分がまだ同じであるが、以前のコミットへのリンクが異なる、新しいコミットで新しいブランチを作成する必要があるのはこのためです。
MD

11

私がこれを行うことがわかった最も簡単な方法は、hubコマンド(https://github.com/defunkt/hub)を使用することです。

プルリクエストを作成するトピックブランチ(この例では「機能」)から、次のコマンドを実行します。

git pull-request

(最初にブランチをプッシュすることを忘れないでください!)

そして、GitHubで「YOUR_USER:feature」の新しいプルリクエストを開きます。

GitHubで既に問題を作成している場合は、プルリクエストをその既存の問題に添付することもできます(Web UIからは実行できないもの)。

$ git pull-request -i 123
[ attached pull request to issue #123 ]

2

実際には、別のブランチを作成せずにこれを行うことができますが、少し遊んでみます。
手順は次のとおりです。

  1. プルする2つのコミット範囲を特定します。これが私が例に使用するものです:(
    その他/マスター)A-> B-> C-> D-> E(あなた/マスター)
    1つのリクエストでBとCをプルし、D&別のE。
  2. プルリクエストを行います。左側(「ベース」)をコミットAにします。右側(「ヘッド」)には、コミット番号Cを入力します。
  3. 最初のリクエストの説明を書きます。
  4. 別のリクエストを行います。ベースにはCのコミット番号を入力し、ヘッドにはE(yours / master)を入力します。
  5. 説明を書きます。

私が見ると、プルリクエストではコミットCが分岐点として認識されています。か何か。


yours / masterからcommit番号を追加する場合でも、other / masterを左側に残す必要があります。また、このメソッドでは、さらに変更が必要な場合に備えて、マージ要求に新しいコミットを追加することはできません。
frisco

私はGithubの上のいくつかの情報とは対照的に、参照、この回答への種類のフォローアップを投稿stackoverflow.com/questions/23159860
マーク・ベネット

これにより、正しいように見える2つのPRが作成され、それぞれに正確に必要なコミットが含まれていることがわかります。しかし、明示的に言うと、それらがマージされたときに正しいことをしますか?のように、最初のPRがB&Cを他のマスターに正しくマージすることがわかります。しかし、2番目のPRがマージされるとき、どのブランチにマージするかをどのようにして知るのですか?(それは他の/マスターではなくコミット 'C'で作成されたため)PRがマージされる順序は重要ですか?(おそらくそうです)
Jonathan Hartley

1

最初にプルリクエストを作成するときに、新しいプルリクエスト用に2つの個別のフォームを開いた場合、マージする異なるブランチでポイントされている限り、フォームを作成できます。たとえば、2つの個別のリクエストを作成して、1つをマスターにマージし、もう1つをテストにマージすることができます。


1

私はGitとGitHubを初めて使用し、OPと同じ質問がありました。

私はおそらくOPの時点では利用できなかった解決策を見つけました。

状況:3つの変更があり、それぞれを以前のビルドから構築し、それぞれに独自のプルリクエスト(PR)を設定したいとします。

問題:開発をマスターにプルしようとする最初のPRを作成すると、すべてが正常に見えますが、2番目のPRに変更を加え、それらをマージ(同じブランチを使用)した後、すべての変更は同じPRにあります。

ミニソリューション:新しいブランチを作成する

git branch mini_change_2
git checkout mini_change_2

コードをGitHubにプッシュしてPRを作成しますが、デフォルトではmini_change_2からマスターにプルします。ただし、マスターにはまだ最初のPRからの変更がないため、PR1とPR2からのすべての変更が含まれます。

最適な解決策:PR2でマージするブランチを指定します。

2番目のPRを作成するときにデフォルトを受け入れるだけでなく、mini_chnage_2をDevelopにプルするとします。これにより、mini_change_2の変更のみが表示されます

次に、新しいブランチmini_change_3を作成し、それをmini_change_3にPRします。

それらをマージし始めると問題が発生します...しかし、それは別の練習です。

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