我有一个有多个分支的项目。我一直在将它们推送到GitHub,现在其他人正在从事该项目,我需要从 GitHub 中提取他们的分支。它在master中运行良好。但是说有人创建了一个分支xyz
。如何xyz
从 GitHub 中提取分支并将其合并到xyz
我的分支中localhost
?
我实际上在这里有我的答案: 在 Git 中推送和拉取分支
但我得到一个错误“![拒绝]”和一些关于“非快进”的东西。
有什么建议么?
但我得到一个错误“![拒绝]”和一些关于“非快进”的东西
那是因为 Git 无法将分支中的更改合并到您当前的 master 中。假设您已经签出 branch master
,并且想要合并到远程 branch other-branch
。当你这样做时:
$ git pull origin other-branch
Git基本上是这样做的:
$ git fetch origin other-branch && git merge other-branch
也就是说, apull
只是 afetch
后跟 a 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
后者是本地操作。
或者更符合GitHub 的 forking 文档:
git branch -f new_local_branch_name upstream/remote_branch_name
一种安全的方法是先创建一个本地分支(即 xyz),然后将远程分支拉入您的本地。
# create a local branch
git checkout -b xyz
# make sure you are on the newly created branch
git branch
# finally pull the remote branch to your local branch
git pull origin xyz
这是可以将远程分支拉到本地分支的语法。
git pull {repo} {remotebranchname}:{localbranchname}
git pull origin xyz:xyz
最好的方法是:
git checkout -b <new_branch> <remote repo name>/<new_branch>
我不确定我是否完全理解这个问题,但是拉一个现有的分支是这样完成的(至少它对我有用:)
git pull origin BRANCH
这是假设您的本地分支是在 origin/BRANCH 之外创建的。
简单地说,如果你想从 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
这帮助我在将其合并到其他分支之前获得远程分支:
git fetch repo xyz:xyz
git checkout xyz
要从 GitHub 中提取分支,您可以使用
git checkout --track origin/the-branch-name
确保分支名称完全相同。
我做了
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
. 我猜他们是等价的。
git pull <gitreponame> <branchname>
通常,如果您仅将 repo 分配给您的代码,那么 gitreponame 将是 origin。
如果你正在处理两个 repo,一个是本地的,另一个是远程的,你可以从git remote -v检查 repo 的列表。这显示了为您当前的代码分配了多少回购。
BranchName 应该存在于相应的 gitreponame 中。
您可以使用以下两个命令来添加或删除 repo
git remote add <gitreponame> <repourl>
git remote remove <gitreponame>
你也可以
git pull -r origin master
修复合并冲突(如果有)
git rebase --continue
-r 用于变基。这将使您的分支结构
v master
o-o-o-o-o
\o-o-o
^ other branch
至
v master
o-o-o-o-o-o-o-o
^ other branch
这将导致更清洁的历史。注意:如果您已经将其他分支推送到原点(或任何其他远程),您可能必须在变基后强制推送您的分支。
git push -f origin other-branch
你可以试试
git branch -a
或git fetch
获取最新的分支列表。
git checkout theBranch
//进入分支
git checkout -b "yourNewBranch"
// 在你自己的分支“theBranch”中工作