269

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

我试过了

git pull --rebase origin configUpdate

但它没有抓住最新的变化 - 我如何合并两者?(还有加分我对pull --rebase命令做了什么?)

4

5 回答 5

402

从您的功能分支(例如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 快速转发到上游,然后将你的更改应用到上面。

于 2011-08-26T06:09:45.380 回答
88

我发现它是:

$ git fetch upstream
$ git merge upstream/master
于 2011-08-26T06:29:07.597 回答
41

切换到本地分支

> git 结帐配置更新

将远程 master 合并到您的分支

> git rebase 主配置更新

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

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

继续变基

> git rebase -- 继续

于 2012-06-23T11:48:49.213 回答
18

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

于 2017-07-05T21:34:28.537 回答
2

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

  1. 单击 Git 菜单 > 管理分支 > 远程/源
  2. 右键单击 master > Merge 'origin/master' into [local branch]

注意:master 在最近的 git 存储库中被称为 main。

在此处输入图像描述

于 2021-05-03T21:22:25.203 回答