得到'致命:分支'主人'在git中不存在'

Zan*_*ong 17 git git-branch

使用git了一段时间,它非常强大和美丽..

但也有些困惑:

在我初始化git repo后它应该在分支主人之下,不是吗?

但是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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

tor*_*rek 38

TL; DR

你可以git checkout master在这一点上.

更长的描述(但仍然不长)

你正在努力做到这一点.

在将来,而不是:

mkdir repo
cd repo
git init
git remote add origin <url>
git fetch origin
git checkout master
Run Code Online (Sandbox Code Playgroud)

你可以简单地运行:

git clone <url> repo
Run Code Online (Sandbox Code Playgroud)

因为上面的六个命令几乎就是git clone这样.

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

换句话说,当前分支是不存在的分支.

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

每当你运行git checkout <name>并且没有命名分支时<name>,Git会检查是否只有一个远程跟踪分支,例如origin/<name>.如果是这样,Git会创建一个新的命名的分支<name>,它指向相同的提交origin/<name>,并且具有origin/<name>作为其上游.

由于最后一步 - git checkout master当时master还没有实际存在 - 是最后一步git clone,git clone还将创建一个master跟踪远程跟踪分支的新分支origin/master.


1请注意,您保留当前索引/暂存区域内容.对于新的空存储库也是如此,但由于它是一个新的空存储库,索引/暂存区域也是空的,并且"保留空集"并不像保留那样.


Elp*_*Kay 8

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

运行后git fetch,以下git checkout master工作即可完成。它相当于:

git branch master origin/master
git checkout master
git branch -u origin/master
Run Code Online (Sandbox Code Playgroud)

  • 基本上这是正确的,但是您如何将其视为“错误”,正如您所指出的那样,这是记录在案的行为,我不明白。当然,由于 OP 正在使用遥控器并以任何方式获取整个内容,因此只需使用 `git clone` 就可以跳过空仓库的整个问题以及几个不需要的步骤 (2认同)