【问题标题】:Git is not showing all branches on localGit没有显示本地的所有分支
【发布时间】:2013-03-21 06:12:28
【问题描述】:

我从 Github 分叉了一个 repo。在执行git remote -v 时会显示:

origin  https://github.com/myusername/moodle.git (fetch)
origin  https://github.com/myusername/moodle.git (push)
upstream    https://github.com/moodle/moodle.git (fetch)
upstream    https://github.com/moodle/moodle.git (push)

moodle.git 有大约 10 个分支,但 repo 只显示其中 2 个。在做git branch -a(显示所有分支)我得到:

  MOODLE_24_STABLE// just these two on local..how?
* master//
  origin/MOODLE_13_STABLE
  origin/MOODLE_14_STABLE
  origin/MOODLE_15_STABLE
  origin/MOODLE_16_STABLE
  origin/MOODLE_17_STABLE
  origin/MOODLE_18_STABLE
  origin/MOODLE_19_STABLE
  origin/MOODLE_20_STABLE
  origin/MOODLE_21_STABLE
  origin/MOODLE_22_STABLE
  origin/MOODLE_23_STABLE
  origin/MOODLE_24_STABLE
  origin/master
  upstream/MOODLE_13_STABLE
  upstream/MOODLE_14_STABLE
  upstream/MOODLE_15_STABLE
  upstream/MOODLE_16_STABLE
  upstream/MOODLE_17_STABLE
  upstream/MOODLE_18_STABLE
  upstream/MOODLE_19_STABLE
  upstream/MOODLE_20_STABLE
  upstream/MOODLE_21_STABLE
  upstream/MOODLE_22_STABLE
  upstream/MOODLE_23_STABLE
  upstream/MOODLE_24_STABLE
  upstream/master

如何在不丢失任何数据或出现任何异常的情况下解决我的问题?

【问题讨论】:

  • 为什么会有更多的本地分支机构?克隆存储库后,只有一个本地主分支。其他分支按需创建。
  • @knittl:好的。我不知道。你能指导我怎么做吗?我已经创建了一个分支说git checkout -b STABLE_23_STABLE,但文件不是那个分支的。
  • git checkout -b MOODLE_23_STABLE 从当前提交创建一个新分支,因此您仍然会看到相同的提交。 git checkout -b MOODLE_23_STABLE upstream/MOODLE_23_STABLEgit checkout MOODLE_23_STABLE(速记/DWIM 语法)

标签: git github moodle git-remote


【解决方案1】:

有些时候,如果你没有拉取最新的代码,你将无法签出新创建的分支。因为你的更改不同步。

所以首先 - 拉最新 - 从新创建的分支结帐

【讨论】:

    【解决方案2】:

    克隆一个 repo 不会复制本地 repo 上的所有远程分支:对于一个有很多分支的大型远程 repo,这会用大量分支污染你的本地命名空间。

    我有一个one-liner command 来创建本地分支来跟踪远程仓库的所有远程分支,但这通常是不需要的。
    您只在需要时创建一个本地分支来跟踪远程分支。

    git checkout -b aBranch --track origin/aBranch
    
    # or, shorter:
    $ git checkout --track origin/aBranch 
    Branch aBranch set up to track remote branch refs/remotes/origin/aBranch.
    Switched to a new branch "aBranch"  
    
    # even shorter at the end of this answer.
    

    添加--track 允许设置配置以将新分支的起点分支标记为“upstream”。
    此配置将告诉 git 显示 git statusgit branch -v 中的两个分支之间的关系。
    此外,当签出新分支时,它会指导不带参数的 git pull 从上游拉取。


    kostix 提到 --track 在从远程分支分支分支时隐含(除非 branch.autosetupmerge 设置为 false

    这就够了

    git checkout aBranch
    

    git checkout man page的确切解释是:

    如果没有找到<branch>,但在一个远程(称为<remote>)中确实存在一个具有匹配名称的跟踪分支,则视为等同于:

    $ git checkout -b <branch> --track <remote>/<branch
    

    【讨论】:

    • --track 在从远程分支分支分支时隐含(除非branch.autosetupmerge 未设置为false)。我还建议@xan,花点时间阅读一些introductory material on remote branches,以免以后迷路。
    • @kostix 好点。我已将这种精确度添加到答案中以提高可见度。
    • git checkout --track origin/aBranch 这解决了我的问题,谢谢
    猜你喜欢
    • 2021-02-26
    • 2012-05-23
    • 2016-12-31
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2010-09-27
    相关资源
    最近更新 更多