为什么我的'git branch'没有主人?

abe*_*t80 84 git

我是一个git新手,我一直在阅读一个"主"分支."主人"只是人们使用的传统名称还是具有特殊含义HEAD

当我git branch对我拥有的克隆进行处理时,我只看到一个单独的分支 - 我正在使用的那个分支.根本没有"主人".如果我输入git checkout master(正如我在很多教程或指南中看到的那样),我会得到

error: pathspec 'master' did not match any file(s) known to git.
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么我的克隆没有一个master人似乎暗示它总是存在.

Bun*_*nyk 85

要签出本地不存在但位于远程仓库中的分支,您可以使用以下命令:

git checkout -t -b master origin/master
Run Code Online (Sandbox Code Playgroud)


Amb*_*ber 67

大多数Git存储库master用作主要(和默认)分支 - 如果您初始化新的Git repo via git init,它将master默认签出.

但是,如果您克隆存储库,则您拥有的默认分支是远程HEAD指向的任何内容(HEAD实际上是指向分支名称的符号引用).因此,如果您克隆的存储库有一个HEAD指向,比方说foo,那么您的克隆将只有一个foo分支.

您克隆的远程可能仍然有一个master分支(您可以检查git ls-remote origin master),但默认情况下您不会创建该分支的本地版本,因为git clone只检查远程的分支HEAD.

  • 我用git init创建了我的repo,并且没有创建master分支.使用Github,分支是自动创建的,但不是Bitbucket.最重要的步骤是:`git add .`,`git commit -m"Test"`,然后`git push -u origin master`. (27认同)
  • @Amber我收到此错误"致命:主人:不是有效的SHA1" (12认同)
  • 然后如果存在,如何从源头检查主人? (6认同)
  • @Amber `git ls-remote origin master` 没有显示任何内容。 (2认同)

Mat*_*tis 41

master 它只是一个分支的名称,除了它是在创建新的存储库时默认创建的,它没有什么神奇之处.

您可以将其添加回来git checkout -b master.

  • 我的问题是:我是怎么意外删除高手的? (2认同)
  • 嗨@MattCurtis,您的回答目前具有误导性。`git checkout -b master` 仅在 HEAD 设置为 origin/master 时有效。在任何其他情况下(例如,您在 'develop'),`git checkout -b master` 将创建一个名为 'master' 的分支,该分支基于当前的 HEAD 位置(例如来自 'develop')。您还需要说明哪个分支将成为新分支的支柱。@Bunyk 在这个线程上有正确的答案:http://stackoverflow.com/a/21330943/287109 (2认同)

eac*_*eau 21

我实际上遇到了与全新存储库相同的问题.我甚至试过创建一个git checkout -b master,但它不会创建分支.然后我意识到如果我做了一些更改并提交了它们,git创建了我的主分支.

  • 误导部分是人们说我确实拥有主人,但无论我尝试做什么,我都会收到错误消息,说我没有主人。(我试图在我的 repo 仍然是空的时候创建一个 dev 分支。)通过提交一些东西(任何文件),master 现在就形成了,我能够继续做其他事情。我尝试了其他答案中的内容,但没有任何帮助。这里的这个答案可能适用于那里的许多人。(我在 Git 中阅读了很多关于散列的内容。我想如果一开始就什么都没有,那就没有什么可散列的了。) (2认同)

ant*_*iob 13

在我的情况下,有一个开发分支但没有分支.因此,我克隆了将新创建的HEAD指向现有分支的存储库.然后我创建了缺少的分支并更新HEAD以指向新的主分支.

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master
Run Code Online (Sandbox Code Playgroud)


dig*_*git 12

如果它是你克隆的新仓库,它可能仍然是空的,在这种情况下:

git push -u origin master

应该可以解决它.

(在我的情况下做了.不确定这是同一个问题,我想我应该发布这个问题.可能会帮助其他人.)


Nic*_*ill 7

我遇到了同样的问题并找出了问题所在.初始化存储库时,实际上没有任何分支.当您启动项目运行git add .然后git commit将创建主分支.

没有检查任何东西你没有主分支.在这种情况下,您需要按照此处其他人建议的步骤进行操作.

  • 真正。进行“ git init”后跟“ git checkout -b somebranchname”,您将没有主分支 (2认同)