协慌网

登录 贡献 社区

Git 从 GitHub 拉某个分支

我有一个带有多个分支的项目。我一直将它们推到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分支。