【问题标题】:After git update remote the new upstream branches are visible but not origin在 git update remote 之后,新的上游分支可见但不可见
【发布时间】:2014-08-03 14:41:03
【问题描述】:

首先我的术语:“上游”是原始的 apache repo(在 github 上)。 “origin”是我的 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

注意从上游创建的[新分支]。我不必做“git branch -b”。但是 origin 新分支(其中有几个)呢?为什么这里的行为有所不同?

我的本​​地仓库(在单独的本地克隆中创建)上的新分支都没有在此克隆中获取/创建。

那么如何获取 origin 中的新分支呢?

更新根据@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 branch 命令的更多信息。

另一个更新@AD7Six 在他的回答中进一步解释了 git branch vs git branch -r

【问题讨论】:

  • “我的本地仓库中的新分支(在单独的本地克隆中创建)都没有在这个克隆中获取/创建”到底是什么意思?您到底希望看到什么?
  • 我正在尝试将在远程源存储库中创建的分支提取到本地克隆中。如果“git remote update”不是正确的方法,那么请提出一个。

标签: git


【解决方案1】:

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

要从任何远程分支创建本地分支,您需要这样做 -

git checkout -b newLocalBranch <remote_name>/<remote_branch_name>

现在,据说分支 newLocalBranch 正在跟踪存储库中的分支。因此,您现在可以在本地 newLocalBranch 上工作,并使用它将新提交推送到远程分支 -

git push <remote_name> newLocalBranch:<remote_branch_name>

【讨论】:

  • 如 OP 中所述,“git 远程更新”自动在远程上游 (apache) 上找到新分支。我不必执行“git checkout -b”来创建它们。那么为什么上游和起源之间的行为差​​异呢?
  • @AD7six 谢谢,更正了术语。 @javadba 获取时您没有创建本地分支。您只是要求 git 更新您的远程引用。如果你必须创建一个本地分支,你应该做一个git checkout -b。因此,您可能只是看到远程引用正在更新。
  • @javadba 您能否将 .git/config 文件的内容粘贴到您的问题中,至少是有关上游和来源的详细信息。
  • OP 已更新以显示新分支 1.1 是从上游自动创建的 - 但没有创建来自 origin 的新分支。
  • @javadba,老兄,相信我! Git 不会为你创建新的分支!它只是更新远程引用。
【解决方案2】:

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

git fetch upstream
git branch --set-upstream newBranch1 upstream/newBranch1 
git push origin newBranch1 

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

要从 origin 获取你自己的分支, git fetch 就足够了,检查:

git branch -avvv

然后您可以使用单行命令从获取的远程跟踪分支创建本地分支:请参阅“git pull all branches from remote repository”。


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

那么为什么上游和源之间的行为差​​异呢?

你应该看到相同的 git a 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”之一)

【讨论】:

  • 你好 VonC。显然我的问题还不够清楚。我自己的远程分支上有几个分支,我试图将它们提取到不同的(本地)克隆中。这里没有“推动”。
  • @javadba 好的,我添加了一个链接以从您获取的远程创建本地分支
  • @javadba 我已经编辑了答案以解决行为差异。
  • 我已经更新了 OP 以显示“git remote update”的输出:它清楚地显示了从上游创建新分支。
  • @javadba 应该只创建远程跟踪分支,而不是本地分支。使用git branchgit branch -r 进行检查。这就是我在回答的最后一部分所说的。
【解决方案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

【讨论】:

    猜你喜欢
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 2017-09-26
    • 2012-02-11
    • 2022-07-15
    • 1970-01-01
    • 2010-10-29
    相关资源
    最近更新 更多