Git在本地没有显示所有分支

20

我从Github上fork了一个仓库。运行 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个分支,但仓库只显示其中的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

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


3
为什么你期望有更多的本地分支?在克隆仓库后,只有一个本地主分支。其他分支会按需创建。 - knittl
@knittl:好的,我不知道这个。你能指导一下我怎么做吗?我创建了一个分支,比如说git checkout -b STABLE_23_STABLE,但是文件不是该分支的那些文件。 - xan
1
git checkout -b MOODLE_23_STABLE 创建一个新的分支,基于当前提交,因此您仍将看到相同的提交记录。可以使用 git checkout -b MOODLE_23_STABLE upstream/MOODLE_23_STABLEgit checkout MOODLE_23_STABLE(简写/DWIM 语法)来完成。 - knittl
Git branch not showing 的副本 - user456814
3个回答

24

克隆一个仓库不会在本地仓库复制所有远程分支: 对于有许多分支的大型远程仓库,这会使您的本地命名空间中充满了大量的分支,从而造成污染。

我有一个一行命令来创建跟踪远程仓库所有分支的本地分支,但通常情况下这并不需要。
只有在需要时才创建跟踪远程分支的本地分支。

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选项可以设置配置,将起点分支标记为新分支的"上游"。
这个配置会告诉git在git statusgit branch -v中显示两个分支之间的关系。
此外,当检出新分支时,它会指示git从上游拉取而不需要参数。


kostix提到,如果从远程分支派生一个分支(除非将branch.autosetupmerge设置为false),则会隐含使用--track选项。

这就足够了。

git checkout aBranch

来自git checkout手册的确切解释如下:

如果找不到<branch>但恰好存在一个跟踪分支与名称匹配的远程分支(称之为<remote>),则视为等同于:

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

当从远程分支派生一个分支时,--track是隐含的(除非branch.autosetupmerge设置为false)。我还建议@xan花些时间阅读一些关于远程分支的入门材料,以免日后迷失方向。 - kostix
@kostix 好观点。我已经将这个精度加入答案以增加可见性。 - VonC
1
git checkout --track origin/aBranch 这个对我的问题有所帮助,谢谢。 - StealthTrails

6

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

所以第一步是 -拉取最新代码 -从新创建的分支检出


0
如果您要初始化一个代码仓库: 1 - git reset 2 - 删除 .git 仓库 3 - git init 4 - 您必须提交第一次提交

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接