Git:リモートブランチをローカルにマージする


204

経由ですべてのリモートブランチをプルしましたgit fetch --all。マージしたいブランチをgit branch -aremotes / origin / branchnameとして表示できます。問題はアクセスできないことです。マージまたはチェックアウトできませんか?

回答:


320

それらのリモート追跡ブランチ〜(でリストされたgit branch -r)をリモートの名前で参照できます。

リモートブランチをフェッチする必要があります:

git fetch origin aRemoteBranch

これらのリモートブランチの1つをローカルブランチにマージする場合:

git checkout master
git merge origin/aRemoteBranch

注1:長い履歴を持つ大規模なリポジトリの--depth=1場合、を使用するときにオプションを追加する必要がありますgit fetch

注2:これらのコマンドは他のリモートリポジトリでも機能するため、フォークで作業してoriginいるupstream場合にとを設定できます。


反対のシナリオ:ローカルブランチの1つをリモートブランチにマージする場合(上記のようにリモートブランチをローカルブランチにマージするのではなく)、まず、そのリモートブランチの上に新しいローカルブランチを作成する必要があります。

git checkout -b myBranch origin/aBranch
git merge anotherLocalBranch

ここでの考え方は、「ローカルブランチの1つ」(ここanotherLocalBranch)をリモートブランチ(origin/aBranch)にマージすることです。
そのためには、最初にmyBranchリモートブランチを表す「」を作成しますgit checkout -b myBranch origin/aBranch。それがパートです。
そしてそれにマージanotherLocalBranchすることができます(へmyBranch)。


aLocalBranch?それはタイプミスですか?もう一度「myBranch」を書くつもりだったのでしょうか?
knocte

1
@knocteありません:私は、「マージしています:「あなたは、これらのリモートブランチの一つに、最寄りの支店のいずれかをマージしたい場合は、」aLocalBranch」を「myBranch」で、「myBranch」リモートブランチを表しますorigin/aBranch
VonC '19年

@VonCにご迷惑をおかけして申し訳ありません。以前のコメントでaLocalBranchはタイプミスではないとおっしゃっていますが、この「ありそうなタイプミス」を修正する最新の編集(2年後!)を承認しました。編集を元に戻す前に確認したいと思います。
rath

1
@rath正解です。私は少し急いで編集し、不注意を避けて編集したようです。私は2番目のマージのケースを明確にするために答えを編集しました。これが今より明確であるかどうか教えていただけますか?
VonC、

91

マージを行うときはいつでも、マージしたいブランチ(例えば " git checkout branch-i-am-working-in")に入り、次のようにします:

git merge origin/branch-i-want-to-merge-from


2
git fetch origin/branch-i-want-to-merge-from最初にやらなきゃいけないと思いますよね?
Hinrich、

9
git fetch origin develop続いてgit merge origin/develop
オリビエ

2
@オリビエあなたは正しい、これはそれを行う正しい方法です。git merge 一人ではそれはできません。
サム・

1
私を理解するのに役立つ巧妙な命名規則をありがとう
tony2tones '25 / 07/25

1
@アキラじゃないgit add .-> git commit -m <message>-> git push -u origin <branch>
Cloud Cho

24

最初に、オリジンからリモートブランチをフェッチします。

git fetch origin remote_branch_name

リモートブランチをローカルブランチにマージします

git merge origin/remote_branch_name

1
受け入れられた回答がマージできるものではないと報告したとき、これは私にとってうまくいきました。私の場合、GitHub上の私のリポジトリの別のユーザーのフォークからマージしていました。
SJT

最初のコマンドフェッチは必要ですか?「git merge origin / remote_branch_name」はローカルではなくリモートブランチから読み取りますか?だから私は気にしないでください、ローカルブランチは更新されますか?
Michael Freidgeim

20

多分あなたはローカルブランチでリモートブランチを追跡したいでしょう:

  1. 新しいローカルブランチを作成します。 git branch new-local-branch
  2. この新しく作成されたブランチを設定して、リモートブランチを追跡します。 git branch --set-upstream-to=origin/remote-branch new-local-branch
  3. このブランチに入る: git checkout new-local-branch
  4. リモートブランチのすべてのコンテンツをローカルブランチにプルします。 git pull

3

すでにリモートブランチをフェッチして実行している場合git branch -a
次のようなものが得られます。

* 8.0
  xxx
  remotes/origin/xxx
  remotes/origin/8.0
  remotes/origin/HEAD -> origin/8.0
  remotes/rep_mirror/8.0

その後、を使用rep_mirror/8.0してリモートブランチをローカルに指定できます。

トリックはそれremotes/rep_mirror/8.0が機能しないが、rep_mirror/8.0機能します。

したがって、git merge -m "my msg" rep_mirror/8.0マージを行うようなコマンド。

(注:これは@VonC回答へのコメントです。コードブロックがコメント形式に適合しないため、これを別の回答とします)

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