我在开发中有一个名为“dmgr2”的分支,我想从主分支(实时站点)中提取所有更改并将所有更改合并到我的开发分支中。有一个更好的方法吗?
这是我在提交更改后计划做的事情:
git checkout dmgr2 git pull origin master
这应该将实时更改拉入我的开发分支,还是我错了?
您列出的步骤将起作用,但还有更长的方法可以为您提供更多选择:
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。
fetch
merge
origin
origin/branch
branch
此时,您可以使用任何查看器(git log、gitk等)来查看您没有的“他们拥有什么”,反之亦然。有时这仅对温暖的模糊感觉有用(“啊,是的,这实际上就是我想要的”),有时它对完全改变策略很有用(“哇,我还不需要那些东西”)。
git log
gitk
最后,该merge命令接受给定的提交,您可以将其命名为origin/master,并尽一切努力将该提交及其祖先引入到您在运行merge. 如果您愿意,您可以插入--no-ff或--ff-only阻止快进,或者仅当结果是快进时才合并。
origin/master
--no-ff
--ff-only
当您使用序列时:
该pull命令指示 git 运行git fetch,然后是git merge origin/master. 因此,这与手动执行这两个步骤 几乎 相同,但存在一些您可能不太关心的细微差别。(特别是由 onlyfetch运行的步骤,pull它不会更新您的 repo 中的 ref:1任何新提交最终仅由特殊参考引用。) __origin/master``FETCH_HEAD
pull
git fetch
git merge origin/master
origin/master``FETCH_HEAD
如果您使用更显式git fetch origin(然后可以选择环顾四周)然后使用git merge origin/master序列,您还可以将自己的本地master与远程同步,只fetch在网络上运行一个:
git fetch origin
master
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 功能来查找上游变基。)