为什么我的“ git branch”没有主站?


94

我是git新手,并且继续阅读有关“ master”分支的信息。“主人”只是人们惯用的惯用名称,还是具有特殊含义HEAD

在我git branch拥有的克隆上执行操作时,我只看到1个单分支-我所在的分支。根本没有“主人”。如果输入git checkout master(如我在许多教程或指南中所看到的),

error: pathspec 'master' did not match any file(s) known to git.

我只是对为什么我的克隆没有一个master所有人似乎都暗示它总是存在而感到困惑。

Answers:


73

大多数Git仓库都用master作主(和默认)分支-如果通过初始化一个新的Git仓库git init,则master默认情况下它将签出。

但是,如果克隆存储库,则拥有的默认分支就是遥控器HEAD指向的对象(HEAD实际上是指向分支名称的符号引用)。因此,如果您克隆的存储库有一个HEAD指向的指针,例如foo,那么您的克隆将只有一个foo分支。

从中克隆的远程服务器可能仍然具有master分支(可以使用进行检查git ls-remote origin master),但是默认情况下您不会创建该分支的本地版本,因为git clone仅签出了该远程服务器的HEAD


6
然后如何从原点检出母版(如果存在)?
Bunyk 2014年

你该怎么办套头掌握
马特·史密斯

32
我用git init创建了我的仓库,但没有创建master分支。使用Github,会自动创建分支,但不会使用Bitbucket创建分支。该mising步骤是:git add .git commit -m "Test",然后git push -u origin master
Shailen 2014年

12
@Amber我收到此错误“致命:主设备:不是有效的SHA1”
KK_07k11A0585 2015年

1
@Amber git ls-remote origin master没有显示任何内容。
Parisa Khateri

86

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

git checkout -t -b master origin/master

感谢您的帮助,即使这个问题已经很久了。但是您的答案不是我要的。
aberrant80 2014年

fatal: Cannot update paths and switch to branch 'master' at the same time.
拉斐尔·奥诺弗雷


在github上固定创建主分支并设置为默认
拉斐尔奥诺弗雷

45

master 仅仅是分支的名称,除了在默认情况下是在创建新存储库时创建的,它没有任何魔术。

您可以使用添加回去git checkout -b master


git checkout -b master只是为我在当前分支上添加了一个新分支。
nnyby,2013年

1
@nnyby 将从任何地方git checkout -b master创建一个master分支HEAD-因此,如果您在另一个分支上,它将master从该分支创建一个分支。除非您已经有一个master分支(除非,例如,您已经删除了它或从未提交过它),否则您将拥有它。如果您已经有一个master分支,此命令只会给您一个错误。
马特·柯蒂斯

2
我的问题是:我是如何意外删除master的?
埃里克·沃克

@EricWalker master只是一个分支,可以使用删除git branch -d master。尽管git可以防止您删除当前所在的分支,但没有什么特别的保护master分支。更具体地说,很难说您是如何做到的。也许您使用shell的history命令来看看?
马特·柯蒂斯

1
@MattCurtis,您好,您的答案目前具有误导性。git checkout -b master仅在HEAD设置为原点/原点时才有效。在任何其他情况下(例如,您在“开发”中),git checkout -b master将基于当前HEAD位置(例如,从“开发”中)创建一个名为“ master”的分支。您还需要说明哪个分支将成为新分支的野兽。@Bunyk在此线程上有正确答案:stackoverflow.com/a/21330943/287109
AVIDeveloper 2016年

23

实际上,对于一个全新的存储库,我也遇到了同样的问题。我什至尝试使用创建一个git checkout -b master分支,但它不会创建分支。然后我意识到,如果我做了一些更改并提交了它们,git就创建了我的master分支。


1
误导性的部分是人们说我确实有主人,但是无论我做什么,都会收到错误消息,说我没有主人。(我正尝试在我的存储库仍为空的同时创建一个dev分支。)通过提交某些内容(任何文件),母版现在应运而生,并且我能够继续做其他事情。我尝试了其他答案中的方法,但没有任何帮助。这里的这个答案可能适用于许多人。(我在Git中阅读了很多有关散列的文章。我猜一开始是否没有什么可散列的。)
Fai Ng 2015年

15

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

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master

啊,我们走了..我没有主人。首先,我添加了一个新文件并进行了初始提交-然后执行了此操作。像魅力一样工作
Dustin Silk

12

如果它是您克隆的新存储库,则它可能仍然是空的,在这种情况下:

git push -u origin master

应该可能会解决它。

(以我为例。不确定这是否是同一问题,以为我应该发布此邮件以防万一。可能会帮助其他人。)


8

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

如果不检查任何内容,则没有master分支。在这种情况下,您需要按照此处其他人建议的步骤进行操作。


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

如果文件夹为空,这可能还不够。因此,要使其正常工作,您应该添加一些文件。这另一种尴尬实际上令人失望。
alehro

0

看来必须在master分支上至少有一个本地提交才能执行:

git push -u origin master

因此,如果您这样做了git init .,然后git remote add origin ...您仍然需要执行以下操作:

git add ...
git commit -m "..."
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.