【问题标题】:How to merge remote master to local branch如何将远程master合并到本地分支
【发布时间】:2011-11-04 06:18:59
【问题描述】:

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

我试过了

git pull --rebase origin configUpdate

但它没有获取最新的更改 - 我如何合并两者? (还有加分我用pull --rebase 命令做了什么?)

【问题讨论】:

标签: git branch pull


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    git fetch
    git rebase origin/master
    

    或更短的形式:

    git pull --rebase
    

    为什么会这样:

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

    • git rebase branchname 从分支 branchname 获取新提交,并将它们插入到您的更改“下方”。更准确地说,它会修改当前分支的历史记录,使其基于 branchname 的提示,以及您在此基础上所做的任何更改。

    • git pullgit fetch; git merge origin/master基本相同。

    • git pull --rebasegit fetch; git rebase origin/master基本相同。

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

    • 您开始开发一项新功能。

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

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

    • 如果您改为 git pull --rebase,git 会将您的 master 快速转发到上游,然后将您的更改应用到上面。

    【讨论】:

    • 我在正确的分支上做了这个,但我仍然可以看到我的本地文件和原始项目的远程主分支之间的差异(即使它说一切都是最新的!)也许我已经项目设置不正确?有什么办法查吗?
    • @Martyn:差异应该是您的本地更改。创建远程分支的另一个分支并检查该分支是否具有正确的文件内容。
    • 我知道这是一个旧答案,但请注意,您可能更喜欢执行 MERGE 而不是变基。如果您以后必须合并到已经有一些更改的远程存储库,则您不想进行变基。
    • 怎么样(假设你目前在分支configUpdate上)...  git pull和git fetch基本一样; git 合并源/主。
    • @Chris:在什么意义上它不是真的?假设 origin/master 为上游?还是 git pull 改了?
    【解决方案3】:

    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

    【讨论】:

      【解决方案4】:

      切换到本地分支

      > git checkout 配置更新

      将远程 master 合并到您的分支

      > git rebase master configUpdate

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

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

      继续变基

      > git rebase --continue

      【讨论】:

      • 不要害怕使用 rebase 而不是 merge 如果您觉得这个问题有差距,请花一些时间调查差异
      【解决方案5】:

      我发现它是:

      $ git fetch upstream
      $ git merge upstream/master
      

      【讨论】:

      • 所以,如果你还没有弄清楚,你的pull --rebase 不起作用,因为origin 指向你的分叉。如果你这样做git pull --rebase upstream/master,它会起作用的。
      • 试试:git merge origin/master
      • 我错过了一次提取,这个答案为我解决了。
      猜你喜欢
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2018-04-14
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      相关资源
      最近更新 更多