git拉一个分支的单个命令?

时间:2017-01-19 03:19:30

标签: git

例如,我现在在develop分支,并希望将远程主服务器拉到本地主服务器,我所做的是:

$ git stash
$ git checkout master
$ git pull
$ git checkout develop
$ git merge master

问题1:当我在develop分支时,如何将远程主服务器拉到本地主服务器?

问题2:是否可以在一个命令中将远程主站合并到本地开发? 目前我使用4个命令

3 个答案:

答案 0 :(得分:4)

答案-1: question-1您的工作程序正常。

$ git fetch
$ git stash
$ git checkout master
$ git pull origin master

$ git checkout develop
$ git stash apply

答案2:您可以直接将origin/master拉入本地develop分支。

$ git pull origin master

答案 1 :(得分:3)

您的问题2已经有其他好的答案(参见sajib' s)。对问题1的简短回答是,"你不能"。

但是,如果我可以稍微改写一下你的问题:"如何在保持开发检查的同时将远程主控器拉到主设备上?"然后你可以使用git worktree来获得优势。它为您提供了另一个工作树,可以完成您使用工作树所做的所有常规操作。

如果您在开发分支上并想要更新master,例如:

git worktree add ../second-repo master
git -C ../second-repo merge origin master

现在master已在您的本地仓库中更新。

要解释上述命令,git worktree会将master签出到另一个文件夹(../second-repo)。只有在将目录虚拟更改为新工作树之后,第二个命令才会执行git merge origin master。请注意,一旦您设置了工作树,就不需要再次设置它。您可以继续使用相同的工作树来更新master。

答案 2 :(得分:1)

你在那里做了两次合并,一次是从origin/mastermaster,第二次是从masterdevelop,你是从脏的开始做的worktree。

合并需要一个解决冲突的工作树:如果origin/mastermaster都改变了文件,git必须对内容进行一些处理,合并任何不影响重叠区域的文件那些对你有帮助的人。

通常,您在上面显示的序列可以在没有人为干预的情况下运行,但重要的是要注意每一步(以及git stash pop您没有显示),很可能有人会不得不考虑合并冲突并确定真正的意义。

以下是我通常给出的例子:假设你改变了

if ( tag == mark
  || tag == error ) {

if ( g->tag == mark 
  || g->tag == error ) {

而其他人将其更改为

if ( tag == mark 
  || tag == error
  || tag == release ) {

git应该做什么?我认为这是唯一可行的事情:它是平底船,并要求你决定结果应该是什么样子。任何熟悉C系列语言的人都会确定正确的分辨率

if ( g->tag == mark 
  || g->tag == error
  || g->tag == release ) {

但只有在确实是正确的解决方案时才达到这个目标,并不在合理期望的普遍接受的范围内。