我有一个带有多个分支的项目。我一直将它们推到GitHub上,现在其他人正在从事该项目,我需要从GitHub中拉出他们的分支。在master上工作正常。但是要说有人创建了一个分支xyz
。如何xyz
从GitHub中提取分支并将其合并到xyz
我的分支中localhost
?
我实际上在这里有我的答案: 在Git中推和拉分支
但是我收到一个错误“![已拒绝]”和一些有关“非快进”的信息。
有什么建议么?
git fetch origin --force
”,但在使用前请先阅读文档。
我有一个带有多个分支的项目。我一直将它们推到GitHub上,现在其他人正在从事该项目,我需要从GitHub中拉出他们的分支。在master上工作正常。但是要说有人创建了一个分支xyz
。如何xyz
从GitHub中提取分支并将其合并到xyz
我的分支中localhost
?
我实际上在这里有我的答案: 在Git中推和拉分支
但是我收到一个错误“![已拒绝]”和一些有关“非快进”的信息。
有什么建议么?
git fetch origin --force
”,但在使用前请先阅读文档。
Answers:
但是我得到一个错误“![已拒绝]”和一些有关“非快进”的信息
这是因为Git无法将分支中的更改合并到当前的主服务器中。假设您已经签出分支master
,并且想要合并到远程分支中other-branch
。执行此操作时:
$ git pull origin other-branch
Git基本上是这样做的:
$ git fetch origin other-branch && git merge other-branch
也就是说,pull
仅仅是一个fetch
接着一个merge
。但是,当pull
-ing时,Git 仅other-branch
在可以执行快速合并的情况下才会合并。一个快进合并是合并在您试图合并到分支的头部是一个直接后裔要合并分支的头。例如,如果您有此历史树,则合并other-branch
将导致快速合并:
O-O-O-O-O-O
^ ^
master other-branch
但是,这不是快速合并:
v master
O-O-O
\
\-O-O-O-O
^ other-branch
要解决您的问题,请先获取远程分支:
$ git fetch origin other-branch
然后将其合并到您当前的分支中(我假设是master
),并解决所有合并冲突:
$ git merge origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit # And commit the merge!
git fetch -f
已经解决了我的问题!谢谢!
xzy
为本地分支master
,这不是原始问题所暗示的;“如何从GitHub中提取分支xyz并将其合并到本地主机上的分支xyz中?”
只需明确地跟踪您的远程分支,一个简单的git pull
就可以满足您的要求:
git branch -f remote_branch_name origin/remote_branch_name
git checkout remote_branch_name
后者是本地操作。
甚至更适合GitHub上关于fork的文档:
git branch -f new_local_branch_name upstream/remote_branch_name
您可以使用以下命令将分支拉到分支。
git pull {repo} {remotebranchname}:{localbranchname}
git pull origin xyz:xyz
当您在master分支上时,还可以先签出一个分支,例如:
git checkout -b xyz
这将从主服务器创建一个新分支“ xyz”,并直接将其检出。
然后,您执行以下操作:
git pull origin xyz
这会将新分支拉到您的本地xyz
分支。
最好的方法是:
git checkout -b <new_branch> <remote repo name>/<new_branch>
简而言之,如果您想从GitHub分支the_branch_I_want
:
git fetch origin
git branch -f the_branch_I_want origin/the_branch_I_want
git checkout the_branch_I_want