我有一个带有多个分支的项目。我一直将它们推到GitHub 上,现在其他人正在从事该项目,我需要从 GitHub 中拉出他们的分支。它在大师中工作正常。但是要说有人创建了一个分支xyz
。如何从 GitHub 中提取分支xyz
并将其合并到我的localhost
xyz
?
我实际上在这里有我的答案:在 Git 中推和拉分支
但是我得到一个错误 “![已拒绝]” 和一些有关 “非快进” 的信息。
有什么建议么?
但是我收到一个错误 “![已拒绝]” 和一些有关 “非快进” 的信息
这是因为 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 pull
就可以满足您的要求:
git branch -f remote_branch_name origin/remote_branch_name
git checkout remote_branch_name
后者是本地操作。
甚至更适合于关于 fork的 GitHub 文档:
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
分支。