我有一个有多个分支的项目。我一直把它们推到GitHub,现在其他人正在研究这个项目,我需要从GitHub中取出它们的分支。它在master中工作正常。但是说有人创建了一个分支xyz
。如何从GitHub中提取分支xyz
并将其合并到xyz
上的分支localhost
?
我实际上在这里得到了答案: Push and pull branches in Git
但我收到错误“![拒绝]”以及“非快进”的内容。
有什么建议吗?
答案 0 :(得分:622)
但我收到错误“![拒绝]”以及“非快进”的内容
那是因为Git无法将分支的更改合并到当前的主服务器中。假设您已检出分支master
,并且想要在远程分支other-branch
中合并。当你这样做时:
$ git pull origin other-branch
Git基本上是这样做的:
$ git fetch origin other-branch && git merge other-branch
也就是说,pull
只是fetch
后跟merge
。但是,当pull
时,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!
答案 1 :(得分:276)
只需明确跟踪远程分支,一个简单的git pull
即可完成您想要的工作:
git branch -f remote_branch_name origin/remote_branch_name
git checkout remote_branch_name
后者是一项本地行动。
或者更适合GitHub documentation on forking:
git branch -f new_local_branch_name upstream/remote_branch_name
答案 2 :(得分:105)
您可以使用以下命令将分支拉到分支。
git pull {repo} {remotebranchname}:{localbranchname}
git pull origin xyz:xyz
当你在主分支机构时,你也可以先签出一个分支,如:
git checkout -b xyz
这会从主人创建一个新分支“xyz”并直接将其检出。
然后你做:
git pull origin xyz
这会将新分支拉到您当地的xyz
分支。
答案 3 :(得分:81)
最好的方法是:
git checkout -b <new_branch> <remote repo name>/<new_branch>
答案 4 :(得分:36)
答案 5 :(得分:31)
我不确定我是否完全理解这个问题,但拉动现有的分支是这样做的(至少它适用于我:)
git pull origin BRANCH
这假设你的本地分支是从origin / BRANCH创建的。
答案 6 :(得分:11)
这有助于我在将其合并到其他地方之前获得远程分支:
git fetch repo xyz:xyz
git checkout xyz
答案 7 :(得分:6)
要从GitHub提取分支,可以使用
git checkout --track origin/the-branch-name
确保分支名称完全相同。
答案 8 :(得分:2)
git pull <gitreponame> <branchname>
通常如果你只为你的代码分配了回购,那么gitreponame就是原产地。
如果您正在处理两个回购,例如一个是本地的,另一个是远程的,您可以从 git remote -v 查看回购列表。这表示为当前代码分配了多少个repo。
BranchName应存在于相应的gitreponame中。
您可以使用以下两个命令添加或删除回购
git remote add <gitreponame> <repourl>
git remote remove <gitreponame>
答案 9 :(得分:1)
您也可以
git pull -r origin master
修复合并冲突(如果有)
git rebase --continue
-r用于rebase。 这将使你从
分支结构 v master
o-o-o-o-o
\o-o-o
^ other branch
到
v master
o-o-o-o-o-o-o-o
^ other branch
这将带来更清晰的历史。 注意:如果您已经将其他分支推送到原点(或任何其他远程),您可能必须在rebase之后强行推送您的分支。
git push -f origin other-branch
答案 10 :(得分:1)
简单地说,如果您想从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
答案 11 :(得分:0)
我做了
git branch -f new_local_branch_name origin/remote_branch_name
代替
git branch -f new_local_branch_name upstream/remote_branch_name
如@innaM所建议。
当我使用上游版本时,它说“致命:无效的对象名称:” upstream / remote_branch_name”。我没有按照评论的建议进行git fetch origin
的操作,而是将upstream
替换为origin
。我想它们是等效的。