Git:本地合并一个远程分支


203

我已通过拔出所有远程分支机构git fetch --all。我可以看到要合并的分支,git branch -a作为remotes / origin / branchname。问题是它不可访问。我无法合并或结帐?

Answers:


319

您可以引用那些远程跟踪分支〜( git branch -r使用其远程名称)。

您需要获取远程分支:

git fetch origin aRemoteBranch

如果要合并本地分支中的那些远程分支之一:

git checkout master
git merge origin/aRemoteBranch

注意1:对于具有悠久历史的大型仓库,您将需要--depth=1在使用时添加该选项git fetch

注意2:这些命令还可以与其他远程仓库一起使用,因此如果您正在使用fork originupstream则可以设置an 和an 。


相反的情况:如果要在远程分支上合并本地分支之一(而不是将远程分支合并到本地分支,如上所示),则需要首先在该远程分支之上创建一个新的本地分支:

git checkout -b myBranch origin/aBranch
git merge anotherLocalBranch

这里的想法是将“本地分支之一”(在此处anotherLocalBranch)合并到远程分支(origin/aBranch)。
为此,您首先创建“ myBranch”来表示该远程分支:这就是该git checkout -b myBranch origin/aBranch部分。
而且那么您可以合并anotherLocalBranch到它(到myBranch)。


aLocalBranch?那是错字吗?我想您是要再次写“ myBranch”吗?
knocte '16

1
@knocte否:“如果要在这些远程分支之一上合并本地分支之一”:我正在将“ aLocalBranch” 合并为“ myBranch”,其中“ myBranch”表示远程分支origin/aBranch
VonC

很抱歉打扰您@VonC,在您先前的评论中您说aLocalBranch的不是错字,但您批准了最新的编辑(2年后!),它纠正了这种“可能的错字”。在撤消修改之前,我想与您确认。
拉斯

1
@rath你是正确的:看来我可能已经草率地审查了该编辑,几乎不小心。我确实编辑了答案以澄清第二个合并案例:您能告诉我现在是否更清楚吗?
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吧?
辛里奇

9
git fetch origin develop其次是git merge origin/develop
奥利维尔(Olivier)

2
@Olivier您是正确的,这是正确的方法。git merge 一个人不会做。
山姆

1
感谢您为我提供帮助的聪明的命名约定
tony2tones

1
@Akira不是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答案的注释。我将其作为另一个答案,因为代码块不适合注释格式)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.