将本地主分支更新到另一个分支的远程主分支

8
我有一个“devel”分支,而“origin/master”已经更新。我运行了“git pull”,并能看到远程的变化。然而,我的本地“master”仍然停留在之前执行“git checkout devel”时的位置。我想将“origin/master”的更改合并到我的“devel”分支中,这样一个分支也存在于远程。
我不想检出“master”分支,因为这将导致重建一个庞大的系统。我可以从不同的分支将我的本地“master”移动到“origin/master”吗?然后我就可以从“devel”执行“merge”。或者直接将“origin/master”合并到“devel”是否更容易?但这似乎会在以后带来麻烦?
编辑:避免此问题的另一种方法是使用相同代码库的不同工作空间。
请参见:git new workdir - 您可以同时检出“master”和“devel”,但使用相同的“.git”存储库。
2个回答

13
更新本地master并合并它与origin/master的唯一区别,与直接合并origin/master相比,就是合并时预生成的提交消息(假设您最终更新了master)。因此,我建议只需合并origin/master

话虽如此,要回答“如何更新本地未签出分支以匹配其跟踪分支”的问题,您可以这样说:

git push . origin/master:master

这里使用了 git push 机制,但是 . 仓库表示 "当前仓库"。你的源分支被指定为 origin/master,远程分支被指定为 master,所以这个操作会将 master 更新为与 origin/master 相匹配。你也可以使用底层命令 git update-ref 来完成同样的任务,但使用 git push 更简单、更安全(因为它默认情况下会防止非快进式合并,我相信它也会防止推送到你正在使用的分支)。

4
嘿,这个本地推送的技巧很棒,不错,谢谢! - poke

2
默认情况下,git pull 命令会从远程分支获取并合并到当前分支。如果在 git pull 命令中没有指定分支,则 Git 将使用为您的分支指定的分支,通常是远程跟踪分支。
因此,在您的 devel 分支中运行 git pull 命令将从远程获取 devel 分支并合并其中的更改,但不会获取 master 分支的更改。
请注意,仅运行 git fetch 命令将更新远程的所有分支。因此,在获取后,origin/master 将被更新,这样您就可以使用 git merge origin/master 命令将其合并到当前分支中。
显然,这不会更新您的本地 master 分支,因此您可能希望稍后更新它,然后再将您的 devel 分支合并到其中。

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