git从高手进入开发分支

我有一个名为dmgr2(开发)的分支,我想从主分支(现场)拉,并将所有的变化纳入我的开发分支。 有一个更好的方法吗? 这是我计划做的事情:

git checkout dmgr2 git pull origin master 

这应该把现场的变化拉到我的开发分支,还是我有这个错误?

您列出的步骤将会起作用,但有一个更长的方法可以给您更多的select:

 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和checkout的顺序,因为fetch只是转到指定的remote( origin )并且对它说:“给我所有的东西我不“,即所有分支机构的所有提交。 它们被复制到您的存储库,但是名为远程branch上的任何分支的origin/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的道德等价物。 所以这和手工做两个步骤几乎是一样的,但是有一些细微的差别可能对你没有太大的意义。 (特别是通过pull运行的fetch步骤只会引用origin/master ,并且不会更新您的repo中的ref: 1任何新的提交只会被特殊的FETCH_HEAD引用引用)。

如果你使用更明确的git fetch origin (然后可以环顾四周)然后git merge origin/master序列,那么你也可以把你自己的本地master与远程系统进行最新的更新,只有一个fetch在整个networking上运行:

 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,它现在更新“远程分支”引用伺机。 (正如发行说明所述,这是一个故意的devise决定,以跳过更新,但事实certificate,更多的人更喜欢git更新它,如果你想要旧的远程分支SHA-1,它默认保存在,因此可以从reflog中恢复,也可以使用新的git 1.9 / 2.0function查找上游的rebase。)