在 git 中出现“严重:分支 'master' 不存在”

got 'fatal: branch 'master' does not exist' in git

用了一段时间git,很强大也很漂亮..

但也对此有些困惑:

在我初始化 git 存储库后,它应该在 branch master 下,不是吗?

但是git branch -a,我什么都没有。
当我尝试为我的分支设置上游时,我得到了 fatal: branch 'master' does not exist

users@debian MINGW64 ~/Desktop/taste
$ git init
Initialized empty Git repository in C:/Users/users/Desktop/taste/.git/

users@debian MINGW64 ~/Desktop/taste (master)
$ git remote add origin git@gitee.com:greedev/Test.git

users@debian MINGW64 ~/Desktop/taste (master)
$ git branch -u origin/master
fatal: branch 'master' does not exist

users@debian MINGW64 ~/Desktop/taste (master)
$ git branch -a

users@debian MINGW64 ~/Desktop/taste (master)
$ git fetch
The authenticity of host 'gitee.com (120.55.226.24)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitee.com,120.55.226.24' (ECDSA) to the list of know                n hosts.
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 7 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (7/7), done.
From gitee.com:greedev/Test
* [new branch]      master     -> origin/master

users@debian MINGW64 ~/Desktop/taste (master)
$ git branch -a
  remotes/origin/master

users@debian MINGW64 ~/Desktop/taste (master)
$ git branch -u origin/master
fatal: branch 'master' does not exist

在你运行git init之后,你看到的master还没有完全创建。它不存在,因为它还没有指向任何提交。我曾经读到它是设计的。但我认为这是一个令人费解的错误。如果你 运行 git branch,它 returns 没什么。

在您 运行 git fetch 之后,下面的 git checkout master 会完成这项工作。相当于:

git branch master origin/master
git checkout master
git branch -u origin/master

TL;DR

此时您可以git checkout master

更长的描述(但仍然没有那么长)

你这样做很辛苦。

将来,代替:

mkdir repo
cd repo
git init
git remote add origin <url>
git fetch origin
git checkout master

你可以简单地 运行:

git clone <url> repo

因为上面的六个命令几乎就是 git clone 所做的。

在前三个步骤之后——创建一个新的、完全空的存储库——你有一个处于特殊状态的存储库:它没有提交,所以它没有分支。同时,它确实有一个当前分支,即master.

也就是说当前分支是不存在的分支.

这种状态不寻常,但很正常。如果你 运行 git checkout --orphan newbranch,你将 Git 存储库置于相同的状态:1 在一个不存在的分支上。一旦有提交哈希存储在分支名称下,就会创建分支。

每当你 运行 git checkout <name> 并且没有名为 <name> 的分支时,Git 检查是否 恰好有一个 远程跟踪分支如origin/<name>。如果是这样,Git 会创建一个名为 <name>new 分支,它指向与 origin/<name> 相同的提交,并且它的 origin/<name>上游。

由于这最后一步——git checkout mastermaster 实际上还不存在时——是 git clone 的最后一步,git clone 也将创建一个新分支 master 跟踪远程跟踪分支 origin/master.


1请注意,您保留了当前索引/暂存区内容。对于新的空存储库也是如此,但是由于它是一个新的空存储库,索引/暂存区也是空的,"retaining the empty set" 感觉不太像保留。