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 log
, gitk
等)来查看您所拥有的“他们拥有的”,反之亦然。 有时这只对温暖的模糊感觉有用(“啊,是的,这实际上是我想要的”),有时它对完全改变策略是有用的(“哇,我不想要这些东西”)。
最后, 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。)