从远程服务器拉取某个分支

假设有人创建了一个分支xyz。我如何从远程服务器(例如github)中提取分支xyz并将其合并到本地存储库中的现有分支xyz中?

问题的答案将分支推送到Git给我错误“![拒绝]”并提到“非快进”。

2007690 次浏览

我不确定我是否完全理解这个问题,但是拉取一个现有的分支是这样做的(至少它对我有用:)

git pull origin BRANCH

这是假设您的本地分支是在起源/分支之外创建的。

一种安全的方法是先创建一个本地分支(即xyz),然后将远程分支拉到您的本地分支中。

# create a local branchgit checkout -b xyz
# make sure you are on the newly created branchgit branch
# finally pull the remote branch to your local branchgit pull origin xyz

下面是可以将远程分支拉取到本地分支的语法。

git pull {repo} {remotebranchname}:{localbranchname}
git pull origin xyz:xyz

只需显式跟踪您的远程分支,一个简单的git pull就可以完成您想要的工作:

git branch -f remote_branch_name origin/remote_branch_namegit checkout remote_branch_name

后者是本地操作。

或者更适合GitHub留档分叉

git branch -f new_local_branch_name upstream/remote_branch_name

但我得到一个错误“![拒绝]”和一些关于“非快进”的内容

那是因为Git无法将分支中的更改合并到您当前的master中。假设您已经签出了分支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如果它可以执行快进合并。快进合并是一种合并,其中您试图合并到的分支的头部是您想要合并的分支的头部的fetch0。例如,如果您有这个历史树,那么合并other-branch将导致快进合并:

O-O-O-O-O-O^         ^master    other-branch

但是,这将没有是一个快进合并:

    v masterO-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 checkout -b <new_branch> <remote repo name>/<new_branch>

git fetch将获取最新的分支列表。

现在你可以git checkout MyNewBranch

已完成:)


有关更多信息,请参阅文档:git get ch

这帮助我在合并到其他分支之前获得远程分支:

git fetch repo xyz:xyzgit checkout xyz

你也可以做

git pull -r origin master

修复合并冲突(如果有)

git rebase --continue

-r用于rebase。这将使您的分支结构从

        v  mastero-o-o-o-o\o-o-o^ other branch

        v  mastero-o-o-o-o-o-o-o^ other branch

这将导致一个更干净的历史。注意:如果您已经将您的其他分支推送到源(或任何其他远程),您可能必须在rebase后强制推送您的分支。

git push -f origin other-branch
git pull <gitreponame> <branchname>

通常,如果您只为您的代码分配了repo,那么gitreponame将是起源。

如果您正在处理两个存储库,例如一个是本地的,另一个是远程的,您可以从远程删除查看存储库列表。这显示了分配给当前代码的存储库数量。

分支名称应该存在于相应的gitreponame中。

您可以使用以下两个命令来添加或删除repo

git remote add <gitreponame> <repourl>git remote remove <gitreponame>

我做了

git branch -f new_local_branch_name origin/remote_branch_name

而不是

git branch -f new_local_branch_name upstream/remote_branch_name

根据@innaM的建议。当我使用上游版本时,它说'致命的:不是有效的对象名称:'上游/remote_branch_name"。我没有按照注释建议做git fetch origin,而是简单地将upstream替换为origin。我想它们是等价的。

简单地说,如果你想从GitHub中提取分支the-branch-I-want

git fetch origingit branch -f the-branch-I-want origin/the-branch-I-wantgit checkout the-branch-I-want

从GitHub中提取分支,您可以使用

git checkout --track origin/the-branch-name

确保分支名称完全相同。

你可以试试

git branch -a

git fetch获取最新的分支列表。

git checkout theBranch//进入分支

git checkout -b "yourNewBranch"//在你自己的分支中工作,以“the分支”为基础

本地用户需要分别更新Master分支和XYZ分支

这些帖子都没有回答最初的问题!

如何从远程服务器(例如GitHub)提取分支xyz和将其合并到本地存储库中的现有分支xyz中?将分支推送到Git的答案给我错误“![拒绝]”并提到“非快进”。

如果您想将远程xyz分支合并到本地xyz分支中,其中两个分支都存在于远程和本地存储库中的主分支之外,只需首先选择或“签出”本地xyz分支,然后在同一远程分支上进行“拉取”。简单!

git checkout xyzgit pull origin xyz

但是,用户遇到了一个错误!该更新不起作用。为什么?

如果这次失败了,这与远程和本地存储库上的两个xyz分支无法合并无关。听起来远程存储库上的主分支已被更改为本地存储库没有的新提交。快进消息可能意味着远程存储库上的xyz分支在本地存储库首先从远程存储库获取添加到其主分支的所有更改之前无法更新本地存储库的xyz分支。

这些可能是新的提交或其他开发人员添加到远程master分支的更改,然后他们在其xyz分支上运行rebase以将其移动到远程master中的新提交HEADS的末尾。本地存储库用户无法合并该更改,因为其master分支在末尾缺少那些新添加的提交,因此无法更新xyz rebase更改,直到其存储库上的本地master分支首先通过pull进行合并更新。

因此,请继续使用远程主服务器的更新更新本地主服务器,首先使用pull,然后再次尝试您的xyz分支pull

git checkout mastergit pull origin
git checkout xyzgit pull origin xyz

请记住,pull只是fetch,然后merge从远程存储库到您当前关注的任何分支上的本地存储库。

这些为我工作。

  1. 将特定的远程分支拉取到您所在的当前本地分支。(其中<remote_repo>是远程存储库,<remote_branch>是要拉取的特定远程分支)
git pull <remote_repo> <remote_branch>

e. g.

git pull origin remote_master
  1. 将特定的远程分支拉取到特定的本地分支。(其中<local_branch>是您要拉入的特定本地分支)
git pull <remote_repo> <remote_branch>:<local_branch>

e. g.

git pull origin remote_master:local_master

从远程到本地获取新分支的简单解决方案

  1. 获取远程分支

    git fetch xyz

  2. 本地切换到该分支

    git switch xyz

  3. 最后,通过运行检查xyz是否出现在本地分支上

    git branch