如何将远程主分支合并到本地分支?

291
我有一个本地分支项目(“configUpdate”),它是从别人的项目中分叉出来的,我对它做了很多更改,并希望将他们所做的更改合并到我的本地分支中。 我已经尝试过...
git pull --rebase origin configUpdate

但它还没有获取到最新的更改-我该如何合并这两个版本?(同时额外加分,我使用pull --rebase命令做了什么?)

但是它还没有抓取最新的更改-我该如何合并两个版本?(如果能说出我使用pull --rebase命令的作用会有额外的奖励分数。)


可能是Git:本地合并远程分支的重复问题。 - Michael Freidgeim
5个回答

430

从你的特性分支(例如configUpdate)运行:

git fetch
git rebase origin/master
或者更短的形式:
git pull --rebase

为什么这样做是有效的:

  • git merge 分支名会取新提交的内容从分支分支名中, 然后将它们添加到当前分支。如果需要,它会自动在顶部添加一个"Merge"提交。

  • git rebase 分支名会取新提交的内容从分支分支名中,然后将它们插入到您的更改下面。更精确地说,它修改了当前分支的历史记录,使其基于分支名的顶部,并包括您在其上所做的任何更改。

  • 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将快进您的主分支到上游的主分支,然后在其上应用您的更改。


1
@Martyn:差异应该是你的本地更改。再fork远程分支并检查该分支是否有正确的文件内容。 - ZeissS
7
我知道这是一个旧答案,但请注意,您可能更喜欢执行MERGE而不是rebase。如果您稍后需要合并到已经具有某些更改的远程存储库,则不要执行rebase。 - Domino
3
假设您当前在configUpdate分支上,那么如何处理呢?git pull基本上与git fetch相同;git merge origin/master。 <-- 这是不正确的。 - Chris
@Chris:什么意义上不是真的?是指将origin/master作为上游的假设?还是git pull已经改变了? - Joey Adams
@Joey Adams,讲解得非常好,我执行了git pull,像你说的一样,我的更改被其他更改所覆盖。应该执行git pull --rebase。 - yantaq
显示剩余6条评论

98

我发现这是:

$ git fetch upstream
$ git merge upstream/master

7
如果你还没有明白,那么你的pull --rebase没有起作用是因为origin指向了你的分支。如果你使用git pull --rebase upstream/master,它将会起作用。请注意不要改变原意。 - Karl Bielefeldt
3
尝试执行命令:git merge origin/master - Chris
我缺少了一个fetch,这个答案解决了我的问题。 - nurettin

47

切换到本地分支

> git checkout configUpdate

合并远程主分支到你的分支

> git rebase master configUpdate

如果出现冲突,请解决它们,并对每个有冲突的文件执行以下命令

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

继续 rebase 操作

> git rebase --continue


不要害怕使用rebase而不是merge,如果你感觉在这个问题上有差距,请花些时间进行调查。 - Sergiy Seletskyy

22

我尝试使用git rebase,但好像不起作用。在执行git rebase后,当我试图将更改推送到本地分支时,我一直收到一个错误提示 ("hint: Updates were rejected because the tip of your current branch is behind its remote counterpart. Integrate the remote changes (e.g. 'git pull ...') before pushing again."),即使我已经执行了git pull也是如此。最终对我有效的方法是使用git merge。

git checkout <local_branch>
git merge <master> 

如果您像我一样是个初学者,这篇关于git合并与git变基的好文章可能会对您有所帮助。 https://www.atlassian.com/git/tutorials/merging-vs-rebasing


4

这适用于使用Visual Studio的开发人员。

  1. 点击Git菜单 > 管理分支 > 远程/origin
  2. 右键点击主分支(master) > 合并 'origin/master' 到 [本地分支]

注意:近期git仓库中master被称为main。

进入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接