首先我的术语:"上游"是最初的apache repo(在github上)。 "来源"是我的apache repo的分支(也在github上)。
执行以下操作后:
git remote update
git fetch
我看到更新的apache repo引用包含两个新分支。
[cloudera@localhost delta]$ git remote update
Fetching origin
Fetching upstream
remote: Counting objects: 58, done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 58 (delta 6), reused 48 (delta 6)
Unpacking objects: 100% (58/58), done.
From https://github.com/apache/spark
7e4a0e1..b060014 branch-0.9 -> upstream/branch-0.9
1a0a2f8..952e0d6 branch-1.0 -> upstream/branch-1.0
* [new branch] branch-1.1 -> upstream/branch-1.1
注意从上游创建的[new branch]。我没有必要做一个" git branch -b"。但是起源新分支(其中有几个)呢?为什么这里的行为不同?
我的本地仓库中的所有新分支(在单独的本地克隆中创建)都没有在此克隆中获取/创建。
那么如何在原点获取新分支?
更新根据@VonC的建议我做了
git branch -avvv
输出DOES显示原点分支;
delta
* master
master
remotes/origin/HEAD
remotes/origin/branch-0.5
..
remotes/origin/delta
remotes/origin/docs st
remotes/origin/strlen
remotes/upstream/branch-0.5
..
remotes/upstream/branch-1.1
remotes/upstream/master
..
所以我的困惑看起来更像是一个基本/初学者:为什么呢
$ git branch
delta
* master
不显示eampe遥控器/ origin / docs ..我想我需要更多地阅读 git branch 命令。
另一个更新 @ AD7Six在他关于 git branch vs git branch -r
的回答中进一步解释了答案 0 :(得分:3)
您需要从本地获取ustream,然后将这些分支推送到您的分支(origin
)。
git fetch upstream
git branch --set-upstream newBranch1 upstream/newBranch1
git push origin newBranch1
您的本地仓库(克隆您的前叉)是中间点,以便从上游获取新的提交/分支并将它们发布到原点。
没有"直接复制"从一个GitHub回购到另一个。
从原点获取自己的分支,git fetch就足够了,请查看:
git branch -avvv
然后,您可以使用单行命令从远程跟踪的分支中创建本地分支:请参阅" git pull all branches from remote repository"。
" git远程更新"自动在远程上游(apache)找到新分支。
我没有做"git checkout -b
"创造它们。那么为什么上游和原点之间的行为差异呢?
您应该看到同一个git git fetch
(或git fetch origin
):如果它们位于git branch -avvv
的结果中,但未被下一个git remote update
提取,这意味着它们已经存在于您的本地克隆。
在这两种情况下(上游或原点),这些分支都是远程跟踪的分支,如git branch -r
(远程r
)所示。
您可以通过比较以下列表来检查:
git branch
git branch -r
在此git fetch tutorial from Atlassian中查看更多内容:
git fetch origin
这将显示已下载的分支:
a1e8fb5..45e66a4 master -> origin/master
a1e8fb5..9e8ab1c develop -> origin/develop
* [new branch] some-feature -> origin/some-feature
来自这些新远程分支的提交在下图中显示为正方形而不是圆形 如您所见,
git fetch
使您可以访问另一个存储库的整个分支结构。
你看到的分支"创建"已注册在" remotes
"命名空间(在OP情况下," remotes/upstream
" one)
答案 1 :(得分:3)
不带参数运行git branch
,只显示本地分支:
-> git branch
* develop
master
要仅显示远程分支,请使用--remote
(或-r
)选项:
-> git branch --remote
origin/HEAD -> origin/master
origin/develop
origin/master
要显示所有分支,请使用--all
(或-a
)选项:
-> git branch --all
* develop
master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
所有命令都可以与详细选项结合使用以获取更多信息:
-> git branch -vv
* develop 5cb42f9 [origin/develop: ahead 3] make logging configurable
master 77de2a8 [origin/master: ahead 7] Merge branch 'develop'
有关分支命令参数的更多信息,请参阅the documentation
答案 2 :(得分:2)
从遥控器中取出只会更新您的远程参考资料,例如。分支如origin/master
。 Git不会自动创建可用于更新远程分支的本地分支。
要从任何远程分支创建本地分支,您需要执行此操作 -
git checkout -b newLocalBranch <remote_name>/<remote_branch_name>
现在,分支newLocalBranch被称为跟踪存储库中的分支。因此,您现在可以使用本地newLocalBranch并使用它将您的新提交推送到远程分支 -
git push <remote_name> newLocalBranch:<remote_branch_name>