如何将远程主服务器合并到本地分支


238

我有一个项目的本地分支(“ configUpdate”),该分支是我从其他人的项目中派生出来的,并且已经对其进行了很多更改,并且希望将他们所做的更改合并到我的本地分支中。

我试过了

git pull --rebase origin configUpdate

但它尚未掌握最新的更改-如何合并两者?(同样对于奖励积分,我使用该pull --rebase命令做了什么?)


Answers:


354

在您的功能分支(例如configUpdate)中运行:

git fetch
git rebase origin/master

或更短的形式:

git pull --rebase

工作原理:

  • git merge branchname从分支获取新提交branchname,并将它们添加到当前分支。如有必要,它会自动在顶部添加“合并”提交。

  • git rebase branchname从分支中获取新提交branchname,并将其插入到您的更改“下”。更准确地说,它修改当前分支的历史记录,使其基于的提示branchname,并在此顶部进行任何更改。

  • git pull基本上与相同git fetch; git merge origin/master

  • git pull --rebase基本上与相同git fetch; git rebase origin/master

那么,为什么要使用git pull --rebase而不是git pull?这是一个简单的例子:

  • 您开始研究新功能。

  • 当您准备好进行更改时,其他开发人员已经推送了一些提交。

  • 如果您git pull(使用合并),则除了自动创建的合并提交之外,您的更改还将被新的提交掩埋。

  • 如果您git pull --rebase改用git,它将把您的master快进到上游,然后在顶部应用您的更改。


我在正确的分支上执行了此操作,但是仍然可以看到本地文件与原始项目的远程主分支之间的差异(即使它说所有内容都是最新的!)也许我设置的项目不正确?有什么办法检查吗?
马丁·

1
@Martyn:差异应该是您当地的变化。重新创建远程分支的分支,并检查该分支是否具有正确的文件内容。
ZeissS 2011年

4
我知道这是一个旧答案,但是请注意,您可能更喜欢合并而不是重新设置基准。如果您以后必须合并到已经进行了一些更改的远程存储库,则不需要重新配置。
Domino

1
怎么样(假设您当前在分支configUpdate上)... git pull与git fetch基本相同;git merge源/主。<-不正确
克里斯(Chris)

@克里斯:从什么意义上说这是不正确的?假设起源/母带为上游?还是git pull已更改?
乔伊·亚当斯

81

我发现是:

$ git fetch upstream
$ git merge upstream/master

6
因此,如果您还没有弄清楚,您pull --rebase就没有用,因为origin它指向您的叉子。如果你这么做会奏效的git pull --rebase upstream/master
Karl Bielefeldt

3
试试:git merge origin / master
克里斯(Chris)

我错过了一个访存,这个答案为我解决了。
nurettin

38

切换到本地分支

> git checkout configUpdate

将远程主服务器合并到您的分支机构

> git rebase主configUpdate

如果您有任何冲突,请更正它们,并对每个冲突的文件执行以下命令

> git add [path_to_file / conflicted_file](例如git add app / assets / javascripts / test.js)

继续改基

> git rebase-继续


如果您在这个问题上有分歧,不要害怕使用rebase而不是合并花一些时间研究差异
Serge Seletskyy 2013年

13

git rebase似乎不适合我。git rebase后,当我尝试将更改推送到本地分支时,我不断收到错误消息(“提示:由于当前分支的尖端位于其远程副本的后面,因此更新被拒绝。集成远程更改(例如'git pull”)。 ..'),然后再次推动。“)即使在git pull之后。最终对我有用的是git merge。

git checkout <local_branch>
git merge <master> 

如果您是像我这样的初学者,那么这是一篇关于git merge vs git rebase的好文章。 https://www.atlassian.com/git/tutorials/merging-vs-rebasing

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.