在git update remote之后,新的上游分支是可见的但不是原点

时间:2014-08-03 14:41:03

标签: git

首先我的术语:"上游"是最初的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

的回答中进一步解释了

3 个答案:

答案 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使您可以访问另一个存储库的整个分支结构。

https://gp1.wac.edgecastcdn.net/8029C4/wac-small/wac/landing/git/tutorial/remote-repositories/pageSections/00/contentFullWidth/0/tabs/01/pageSections/02/contentFullWidth/00/imageBinary/git-tutorial-repos-fetch.png

你看到的分支"创建"已注册在" remotes"命名空间(在OP情况下," remotes/upstream" one)

答案 1 :(得分:3)

Git分支仅显示本地分支

不带参数运行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>