假设有人创建了一个分支xyz。我如何从远程服务器(例如github)中提取分支xyz并将其合并到本地存储库中的现有分支xyz中?
xyz
问题的答案将分支推送到Git给我错误“![拒绝]”并提到“非快进”。
我不确定我是否完全理解这个问题,但是拉取一个现有的分支是这样做的(至少它对我有用:)
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 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中合并。当您这样做时:
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将导致快进合并:
pull
fetch
merge
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 fetch
现在你可以git checkout MyNewBranch
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
而不是
根据@innaM的建议。当我使用上游版本时,它说'致命的:不是有效的对象名称:'上游/remote_branch_name"。我没有按照注释建议做git fetch origin,而是简单地将upstream替换为origin。我想它们是等价的。
git fetch origin
upstream
origin
简单地说,如果你想从GitHub中提取分支the-branch-I-want:
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 theBranch
git checkout -b "yourNewBranch"//在你自己的分支中工作,以“the分支”为基础
git checkout -b "yourNewBranch"
这些帖子都没有回答最初的问题!
如何从远程服务器(例如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从远程存储库到您当前关注的任何分支上的本地存储库。
这些为我工作。
<remote_repo>
<remote_branch>
git pull <remote_repo> <remote_branch>
e. g.
git pull origin remote_master
<local_branch>
git pull <remote_repo> <remote_branch>:<local_branch>
git pull origin remote_master:local_master
获取远程分支
git fetch xyz
本地切换到该分支
git switch xyz
最后,通过运行检查xyz是否出现在本地分支上
git branch