Githubで、プルリクエストをデフォルトとは異なるブランチにマージします


122

プルリクエストがGithubでホストされている私のリポジトリに送信されます。デフォルトでは、masterブランチにマージされます。

変更がマージされるブランチを変更する方法はありますか?

回答:


86

15.08.2016以降、 GitHubでは、GUIを介してプルリクエストのターゲットブランチを変更できます。Editタイトルの横をクリックし、ドロップダウンからブランチを選択します。

スクリーンショット

オープンプルリクエストのベースブランチを変更できるようになりました。プルリクエストを作成したら、ベースブランチを変更して、プルリクエストの変更が別のブランチと比較されるようにすることができます。新しいブランチを正しいベースブランチで開くのではなく、元のプルリクエストのベースブランチを変更することにより、貴重な作業と議論を続けることができます。


1
これは、この質問に対する正しい答えになるはずです(GitHubへのアップグレード後)。
stuxnetting

この機能はもう存在していないようです(2018-02-15現在)。最近のプルリクエストでは、ターゲットブランチは、ソースリポジトリ/ブランチと同じ青色のフォントで水色の背景に表示され、ボタンではなくなりました。
cgogolin 2018

12
ああ!します!最初に「編集」をクリックする必要があります(上記のスクリーンショットからは明らかではありません)。私はこれを見落としました。ごめんなさい。
cgogolin

@cgogolin指摘していただきありがとうございます。コメントを読んで[編集]ボタンをクリックするまで、私も混乱しました。
mhucka

Githubは、「プルリクエストのベースブランチを変更すると、一部のコミットがタイムラインから削除される場合がある」と警告しています。そして「古いベースブランチからのいくつかのコミットはタイムラインから削除されるかもしれません。」これはどういう意味ですか?
Matthias Fripp

55

提出者はプルリクエストを発行するときにそれを変更できますが、一度発行すると変更できません。

一方、ブランチとプッシュを手動でマージすることができます。これは、誤ってターゲットに設定されたプルリクエストに対して半定期的に行います。

プルリクエストのコンポーネントを操作するのに役立つhub宝石が見つかるかもしれません。

そのgemは、手動プロセスを完了します。

  1. フォークのリモートをローカルチェックアウトに追加します。
  2. そのリモートをフェッチします。
  3. git checkout ${target_branch} && git merge ${remote}/${branch}
  4. git push origin ...

1
手動でマージしてプッシュした場合、Githubはプルリクエストが効果的に完了したことを認識しますか?リモートの個別のリポジトリ(フォーク)からマージする方法についてのポインタはありますか?
eoinoc

3
確かではありませんが、直接ではありません。変更がターゲットブランチにマージされなかったため、プルリクエストが定義どおりに完了していません。手動で閉じる必要があります。ポインタについては、編集されたコメントを参照してください。
Daniel Pittman

git merge --no-ff ...@GuillermoMansillaが彼の回答で言及しているように使用することをお勧めします。
jjmontes 2016年

3
「いったん発行されると、変更することはできません」-2016年8月の時点では、もう当てはまりません。以下の@maliayasの回答を参照してください:stackoverflow.com/a/38985999/12484
Jon Schneider

1
今日(2017年3月3日)、この手順に従いました。プルリクエストを別のブランチにダウンロードし、いくつかの追加の修正を加えてから、マスターにマージしました。プルリクエストからのコミットがマスターで終了すると、GitHubはプルリクエストを自動的に閉じました。
Ivan Krivyakov 2017年

14

他の回答で述べられているハブgemを使用する代わりに、コマンドラインを使用してローカルのプルリクエストをマージすることもできます。これにより、次のことが可能になります。

$ git fetch origin
$ git checkout *target_branch*
$ git merge pr/XXX
$ git push origin *target_branch*

上記のコマンドは、.git/configファイルに次の行を最初に追加した場合にのみ直接機能します。

fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/*

これにより、すべてのプルリクエストをダウンロードできます。これは巨大なリポジトリでは望ましくない可能性があるため、GitHubはgit fetch origin pull/ID/head:BRANCHNAME構文を特徴とするように命令を変更しました。これにより、構成ファイルの変更が回避され、その単一のプルリクエストのみがダウンロードされます。


8

既存のものではないため、既存のプルリクエストを変更することはできませんが、関連するソースリポジトリがまだ存在する場合は、新しいプルリクエストを簡単に作成できます。

送信者のリポジトリに移動し、同じコミットを使用して自分のリポジトリに新しいプルリクエストを作成しますが、正しいターゲットブランチを正しく設定していることを確認してください。

次に、自分のリポジトリに戻り、新しいプルリクエストを受け入れます。出来上がり!


リポジトリを変更した場合、これは機能しますか?「同じコミット」であることをどのように保証しますか?
ragerdl 2014年

@ragerdl-'feature-per-branch'モデルを使用して開発している場合は、上流のブランチに対するブランチを持つPRを作成でき、同じコミットが含まれているはずです。
geerlingguy 2015

2
ローカルリポジトリにアクセスせずにGitHubで直接実行する唯一の方法。
kopischke

8

ダニエルピットマンの解決策には何の問題もありませんが、私はそれらのマージを「早送りなし」、つまりステップ番号3を次のように変更するものとして扱います。

git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}

を使用する--no-ffと、履歴が読みやすくなります。$nコミットはからのもの$branchであることが明確に示されます。また、そのブランチで行われた何かを元に戻す必要がある場合にも、それはあなたの人生を楽にします。

eoinocの質問にも回答し、追加のヒントを与えるには:

マージを行った後、git cliはメッセージを書き込むように要求します。通常、一般的なメッセージは次のようなものを表示します

リモート追跡ブランチ 'user / their-branch'をyour-branchにマージします

必ずそのメッセージを編集し、プルリクエスト番号への参照を含めてください。つまり:(プルリクエスト番号が123であると仮定)

リモート追跡ブランチ 'user / their-branch'をyour-branchにマージします

参照番号#123何でも解決...

したがって、次にgithubの問題/プル要求ページにアクセスして、その特定のプルリクエストを確認すると、マージを行った場所をコミットするためのリンクを含むメッセージが表示されます。

これが私が意味することのスクリーンショットです。

ここに画像の説明を入力してください


6

これを行うには、リポジトリのホームページに移動し、ブランチをクリックして、デフォルトのブランチをマスターから別の何かに変更します(私の場合は "dev")。

その後、誰かがプルリクエストを作成すると、mergeボタンは自動的にリクエストをマスターではなく「dev」にマージします。

ここに画像の説明を入力してください


入力ミスの修正に感謝します@Tin Man @感謝します
16

4
調整/編集に感謝する必要はありません。それは私たちがサイトのために行うことです。良い答えを書き続けてください、それで十分です。
ティンマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.