假设有人创建了一个分支xyz。如何从远程服务器(例如GitHub)中提取分支xyz并将其合并到本地存储库中的现有分支xyz中?
答案推送分支到Git会给我一个错误“![拒绝]”,并提到“非快进”。
假设有人创建了一个分支xyz。如何从远程服务器(例如GitHub)中提取分支xyz并将其合并到本地存储库中的现有分支xyz中?
答案推送分支到Git会给我一个错误“![拒绝]”,并提到“非快进”。
我不确定我是否完全理解这个问题,但拉动现有分支是这样做的(至少对我来说是这样的:)
git pull origin BRANCH
这是假设您的本地分支是从原始分支创建的。
一种安全的方法是首先创建本地分支(即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 pull就能满足您的需求:
git branch -f remote_branch_name origin/remote_branch_name
git checkout remote_branch_name
后者是本地操作。
或者更符合GitHub关于分叉的文档:
git branch -f new_local_branch_name upstream/remote_branch_name
但我收到了一个错误“![拒绝]”和一些关于“非快进”的信息
这是因为Git无法将分支中的更改合并到当前的主节点中。假设您签出了分支主节点,并且希望在远程分支中合并其他分支。执行此操作时:
$ git pull origin other-branch
Git基本上是这样做的:
$ git fetch origin other-branch && git merge other-branch
也就是说,pull只是一个fetch,然后是一个merge。然而,当拉入时,Git只有在能够执行快速向前合并的情况下才会合并其他分支。快速向前合并是一种合并,其中您尝试合并的分支的头部是您要合并的分支头部的直接后代。例如,如果您有此历史树,那么合并其他分支将导致快速向前合并:
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
然后将其合并到当前分支(我假设它是主分支),并修复所有合并冲突:
$ git merge origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit # And commit the merge!
你也可以
git pull -r origin master
修复合并冲突(如果有)
git rebase --continue
-r表示重基。这将使您从
v master
o-o-o-o-o
\o-o-o
^ other branch
to
v master
o-o-o-o-o-o-o-o
^ other branch
这将导致一个更干净的历史。注意:如果您已经将另一个分支推送到源(或任何其他远程),则可能必须在重新设置基之后强制推送分支。
git push -f origin other-branch
git pull <gitreponame> <branchname>
通常,如果您只有repo分配给代码,那么gitrepname将是源代码。
如果您正在处理两个回购,比如一个是本地的,另一个是远程的,您可以从gitremote-v查看回购列表。这显示了分配给当前代码的回购数量。
BranchName应存在于相应的gitrepname中。
您可以使用以下两个命令添加或删除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所建议的。当我使用上游版本时,它说“fatal:不是有效的对象名:”upstream/remote_branch_name“”。我并没有按照注释的建议执行gitfetchorigin,而是简单地将上游替换为origin。我想它们是等价的。
简单地说,如果你想从GitHub中提取分支,我希望:
git fetch origin
git branch -f the-branch-I-want origin/the-branch-I-want
git checkout the-branch-I-want
你可以试试
git branch -a
或gitfetch获取最新的分支列表。
git签出分行//进入分行
gitcheckout-b“yourNewBranch”//在基本“theBranch”中的自己的分支中工作
本地用户需要分别更新主分支和XYZ分支
这些帖子都没有回答最初的问题!
如何从远程服务器(例如GitHub)拉取分支xyz将其合并到我的本地回购中的现有分支xyz中?推送分支到Git的答案是“![拒绝]”并提到“非快进”。
如果要将远程xyz分支合并到本地xyz分支中,其中两个分支都存在于远程和本地存储库中的主分支之外,只需先选择或“签出”本地xyz分行,然后对同一个远程分支执行“拉”操作。易于理解的
git checkout xyz
git pull origin xyz
但是,用户收到了一个错误!该更新不起作用。为什么?
如果这是失败的,这与远程和本地存储库上的两个xyz分支无法合并无关。听起来,远程存储库上的主分支已更改为本地存储库没有的新提交。快进消息可能意味着远程回购上的xyz分支无法更新本地回购的xyz分行,直到本地回购首先从远程回购获得添加到其主分支的所有更改。
这些可能是其他开发人员添加到远程主分支的新提交或更改,然后在他们的xyz分支上运行一个rebase,将其移动到远程主中新提交HEADS的末尾。本地回购用户无法合并该更改,因为其主分支在末尾缺少那些新添加的提交,因此无法更新xyz rebase更改,直到其回购上的本地主分支首先通过拉取更新为合并。
因此,继续使用远程主机的更新来更新本地主机,首先使用pull,然后再次尝试xyz分支pull。。。
git checkout master
git pull origin
git checkout xyz
git pull origin xyz
记住,拉取只是一个获取,然后从远程回购合并到您当前关注的任何分支上的本地回购。
这些对我有用。
要将特定的远程分支拉到当前所在的本地分支,请执行以下操作。(其中<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>
e.g.
git pull origin remote_master:local_master