Git pull a certain branch from GitHub
我有一个有多个分支的项目。我一直在把他们推到Github,现在有人在这个项目上工作,我需要从Github拉他们的分支。它在主人那里工作得很好。但假设有人创建了一个分支
我的答案是:在Git中推拉分支
但我得到一个错误"![拒绝]"以及一些关于"非快速前进"的内容。
有什么建议吗?
But I get an error"! [rejected]" and something about"non fast forward"
号
这是因为Git无法将分支中的更改合并到当前主控形状中。假设您已经签出了分支
1 | $ git pull origin other-branch |
。
Git基本上是这样做的:
1 | $ git fetch origin other-branch && git merge other-branch |
也就是说,一个
1 2 3 | O-O-O-O-O-O ^ ^ master other-branch |
。
但是,这并不是一个快速向前的合并:
1 2 3 4 5 | v master O-O-O \ \-O-O-O-O ^ other-branch |
要解决您的问题,请首先获取远程分支:
1 | $ git fetch origin other-branch |
。
然后将它合并到您当前的分支(我假设是
1 2 3 4 | $ git merge origin/other-branch # Fix merge conflicts, if they occur # Add merge conflict fixes $ git commit # And commit the merge! |
号
只需显式地跟踪远程分支,一个简单的
1 2 | git branch -f remote_branch_name origin/remote_branch_name git checkout remote_branch_name |
后者是本地操作。
或者更适合Github的分叉文档:
1 | git branch -f new_local_branch_name upstream/remote_branch_name |
。
可以使用以下命令将分支拉到分支。
1 2 3 | git pull {repo} {remotebranchname}:{localbranchname} git pull origin xyz:xyz |
号
当您在主分支上时,还可以首先签出一个分支,如:
1 | git checkout -b xyz |
这将从主服务器创建一个新的分支"xyz",并直接将其签出。
然后你会:
1 | git pull origin xyz |
。
这将把新的分支机构拉到您当地的
最好的方法是:
1 | git checkout -b <new_branch> <remote repo name>/<new_branch> |
号
现在你可以开始了。
完成:)
有关更多信息,请参阅docs:git fetch
我不确定我是否完全理解这个问题,但是拉一个现有的分支是这样做的(至少对我有用)。
1 | git pull origin BRANCH |
这是假设您的本地分支是从源/分支创建的。
这有助于我在将远程分支合并到其他分支之前获取远程分支:
1 2 | git fetch repo xyz:xyz git checkout xyz |
号
1 | git pull <gitreponame> <branchname> |
号
通常,如果只有repo分配给代码,那么gitreponename就是源代码。
如果您正在处理两个repo,一个是本地的,另一个是远程的,就像您可以从git remote-v查看repo的列表一样。这显示有多少repo分配给您的当前代码。
BranchName应存在于相应的GitRepoName中。
您可以使用以下两个命令添加或删除repo
1 2 | git remote add <gitreponame> <repourl> git remote remove <gitreponame> |
简单地说,如果您想从Github拉出分支
1 2 3 | git fetch origin git branch -f the_branch_I_want origin/the_branch_I_want git checkout the_branch_I_want |
号
你也可以
1 | git pull -r origin master |
号
修复合并冲突(如果有)
1 | git rebase --continue |
号
-R代表钢筋。这将使您的分支结构
1 2 3 4 | v master o-o-o-o-o \o-o-o ^ other branch |
号
到
1 2 3 | v master o-o-o-o-o-o-o-o ^ other branch |
号
这将导致一个干净的历史。注意:如果您已经将其他分支推到原点(或任何其他远程位置),则可能需要在重新平衡后强制推送分支。
1 | git push -f origin other-branch |
号
我做的
1 | git branch -f new_local_branch_name origin/remote_branch_name |
。
而不是
1 | git branch -f new_local_branch_name upstream/remote_branch_name |
。
如@innam所建议。当我使用上游版本时,它说"致命:不是一个有效的对象名:上游/远程分支名称"。我并没有如评论所建议的那样做