小编典典

如何从master“git pull”到开发分支

all

我在开发中有一个名为“dmgr2”的分支,我想从主分支(实时站点)中提取所有更改并将所有更改合并到我的开发分支中。有一个更好的方法吗?

这是我在提交更改后计划做的事情:

git checkout dmgr2
git pull origin master

这应该将实时更改拉入我的开发分支,还是我错了?


阅读 162

收藏
2022-03-03

共1个答案

小编典典

您列出的步骤将起作用,但还有更长的方法可以为您提供更多选择:

git checkout dmgr2      # gets you "on branch dmgr2"
git fetch origin        # gets you up to date with origin
git merge origin/master

fetch命令可以在 之前的任何时间完成merge,即,您可以交换获取和结帐的顺序,因为fetch只需转到命名的远程 ( origin)
并对它说:“给我所有我没有的东西”,即所有分支上的所有提交。它们被复制到您的存储库,但以远程命名origin/branch的任何分支命名branch

此时,您可以使用任何查看器(git loggitk等)来查看您没有的“他们拥有什么”,反之亦然。有时这仅对温暖的模糊感觉有用(“啊,是的,这实际上就是我想要的”),有时它对完全改变策略很有用(“哇,我还不需要那些东西”)。

最后,该merge命令接受给定的提交,您可以将其命名为origin/master,并尽一切努力将该提交及其祖先引入到您在运行merge.
如果您愿意,您可以插入--no-ff--ff-only阻止快进,或者仅当结果是快进时才合并。

当您使用序列时:

git checkout dmgr2
git pull origin master

pull命令指示 git 运行git fetch,然后是git merge origin/master. 因此,这与手动执行这两个步骤
几乎 相同,但存在一些您可能不太关心的细微差别。(特别是由 onlyfetch运行的步骤,pull它不会更新您的 repo 中的
ref:1任何新提交最终仅由特殊参考引用。) __origin/master``FETCH_HEAD

如果您使用更显式git fetch origin(然后可以选择环顾四周)然后使用git merge origin/master序列,您还可以将自己的本地master与远程同步,只fetch在网络上运行一个:

git fetch origin
git checkout master
git merge --ff-only origin/master
git checkout dmgr2
git merge --no-ff origin/master

例如。


1这第二部分已经改变——说“固定”——git
1.8.4,它现在机会主义地更新“远程分支”引用。(正如发行说明所说,跳过更新是经过深思熟虑的设计决定,但事实证明,更多的人更喜欢 git
更新它。如果你想要旧的远程分支 SHA-1,它默认保存在,因此可以从 reflog 中恢复。这也启用了一个新的 git 1.9/2.0
功能来查找上游变基。)

2022-03-03