例如,我现在在develop
分支,并希望将远程主服务器拉到本地主服务器,我所做的是:
$ git stash
$ git checkout master
$ git pull
$ git checkout develop
$ git merge master
问题1:当我在develop
分支时,如何将远程主服务器拉到本地主服务器?
问题2:是否可以在一个命令中将远程主站合并到本地开发? 目前我使用4个命令
答案 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/master
到master
,第二次是从master
到develop
,你是从脏的开始做的worktree。
合并需要一个解决冲突的工作树:如果origin/master
和master
都改变了文件,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 ) {
但只有在确实是正确的解决方案时才达到这个目标,并不在合理期望的普遍接受的范围内。