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

在git update remote之后,新的上游分支是可见的,但不是源分支,git,Git,首先,我的术语是:“上游”是最初的ApacheRepo(在github上)。“origin”是我的apacherepo分支(也在github上) 执行以下操作后: git remote update git fetch 我看到ApacheRepo引用更新为包含两个新分支 [cloudera@localhost delta]$ git remote update Fetching origin Fetching upstream remote: Counting objects: 58, don

首先,我的术语是:“上游”是最初的ApacheRepo(在github上)。“origin”是我的apacherepo分支(也在github上)

执行以下操作后:

git remote update
git fetch
我看到ApacheRepo引用更新为包含两个新分支

[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
注意从上游创建的[新分支]。我不必做“git分支-b”。但是的起源的新分支(有几个分支)呢?为什么这里的行为不同

在此克隆中未获取/创建我的本地repo(在单独的本地克隆中创建)上的任何新分支

那么,如何获取原始版本中的新分支呢

根据@VonC的建议更新

git branch -avvv
输出不显示原始分支

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 remotes/origin/docs不显示。。我想我需要在这里更多地阅读git分支命令


另一个更新@AD7Six在他的回答中进一步解释了git分支与git分支的关系-r

您需要从ustream本地获取,然后将这些分支推到您的分支(
origin

本地repo(fork的克隆)是从上游获取新提交/分支并将其发布到源站的中间点。
从一个GitHub repo到另一个GitHub repo没有“直接复制”

要从源代码获取您自己的分支,git fetch就足够了,请检查:

git branch -avvv
然后,您可以使用一行命令从获取的远程跟踪分支创建本地分支:请参阅“”


“git远程更新”自动在远程上游(apache)上找到新分支。
我不必做“
git checkout-b
”来创建它们

那么,为什么上游和源头之间的行为存在差异呢

您应该看到相同的git a
git fetch
(或
git fetch origin
):如果它们是
git分支-avvv
的结果,但不是由下一次
git远程更新
获取的,则意味着它们已经存在于本地克隆中

在这两种情况下(上游或起点),这些分支都是远程跟踪分支,如
git branch-r
r
表示远程)

您可以通过比较以下列表进行检查:

  • 本地分行:
    git分行
  • 远程(跟踪)分支:
    git分支-r

更多信息请参见:

这将显示已下载的分支:

在下图中,来自这些新远程分支的提交显示为正方形而不是圆形。
如您所见,
git fetch
允许您访问另一个存储库的整个分支结构


您看到的“创建”分支注册在“
remotes
”命名空间中(在OP案例中,“
remotes/upstream
”一个)

从远程获取只会更新远程引用,例如
origin/master
之类的分支。Git不会自动创建可用于更新远程分支的本地分支

要从任何远程分支创建本地分支,您需要执行以下操作-

git checkout -b newLocalBranch <remote_name>/<remote_branch_name>
git签出-b newLocalBranch/
现在,据说分支newLocalBranch正在跟踪存储库中的分支。因此,您现在可以处理本地newLocalBranch,并使用它将新提交推送到远程分支,使用-

git push <remote_name> newLocalBranch:<remote_branch_name>
git-push-newLocalBranch:
Git branch仅显示本地分支 不带参数运行
git branch
,将仅显示本地分支:

-> git branch
* develop
  master
要仅显示远程分支,请使用
--remote
(或
-r
)选项:

要显示所有分支,请使用
--all
(或
-a
)选项:

所有命令都可以与详细选项结合使用,以获取更多信息:

-> git branch -vv
* develop 5cb42f9 [origin/develop: ahead 3] make logging configurable
  master  77de2a8 [origin/master: ahead 7] Merge branch 'develop'

有关分支命令参数的更多信息,请参见

您所说的“我的本地repo(在单独的本地克隆中创建的)上没有一个新分支是在此克隆中获取/创建的”到底是什么意思?您希望看到什么?我正在尝试将远程源存储库中创建的分支提取到本地克隆中。如果“git远程更新”不是正确的方法,那么请推荐一种。嗨,VonC。显然我的问题还不够清楚。在我自己的远程fork上有几个分支,我正试图将它们提取到另一个(本地)克隆中。这里没有“推送”。@javadba好的,我添加了一个链接,用于从您拥有的远程设备创建本地brnachefetched@javadba我编辑了答案以解决行为的差异。我更新了OP以显示“git远程更新”的输出:它清楚地显示了从上游创建新分支。@javadba这应该是只创建远程跟踪分支,而不是本地分支。使用
git branch
git branch-r
检查。这就是我在回答的最后一部分所说的,正如OP中提到的,“git远程更新”会自动在远程上游(apache)上找到新的分支。我不必使用“git checkout-b”来创建它们。那么,为什么上游和源头之间的行为存在差异呢?@AD7six谢谢,更正了术语@javadba获取时,您没有创建本地分支。您只是要求git更新远程引用。如果您必须创建一个本地分支,您应该执行一个
git checkout-b
。很可能你只是看到远程引用被更新了。@javadba你能在你的问题中粘贴.git/config文件的内容吗,至少与上游和源站相关的详细信息。OP已更新,以显示新分支1.1是从上游自动创建的-但没有从源站创建任何新分支。@jav
git push <remote_name> newLocalBranch:<remote_branch_name>
-> git branch
* develop
  master
-> git branch --remote
  origin/HEAD -> origin/master
  origin/develop
  origin/master
-> 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'