Git 得到';致命:分支';硕士';不存在';吉特

Git 得到';致命:分支';硕士';不存在';吉特,git,git-branch,Git,Git Branch,使用git一段时间,它非常强大和漂亮 但也有一些困惑: 在我初始化git回购后,它应该在分支主下,不是吗 但是git branch-a,我什么都没有,伙计。 当我尝试为我的分支设置上游时,我得到了致命的:分支“主”不存在 users@debian MINGW64 ~/Desktop/taste $ git init Initialized empty Git repository in C:/Users/users/Desktop/taste/.git/ users@debian MINGW6

使用
git
一段时间,它非常强大和漂亮

但也有一些困惑:

在我初始化git回购后,它应该在分支主下,不是吗

但是
git branch-a
,我什么都没有,伙计。
当我尝试为我的分支设置上游时,我得到了致命的:分支“主”不存在

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 checkout master
和一些教程。

运行
git init
后,您看到的
master
尚未完全创建。它不存在,因为它尚未指向任何提交。我曾经读到它是被设计的。但我认为这是一个令人费解的错误。如果运行
git分支
,它将不返回任何内容

运行
git fetch
后,下面的
git签出主机将执行此任务。这相当于:

git branch master origin/master
git checkout master
git branch -u origin/master
TL;博士 此时,您可以
git checkout master

更长的描述(但仍然没有那么长) 你这样做很难

在未来,而不是:

mkdir repo
cd repo
git init
git remote add origin <url>
git fetch origin
git checkout master
mkdir回购
cd回购
初始化
git远程添加源
git获取源
切换到主分支
您只需运行:

git clone <url> repo
git克隆repo
因为上面的六个命令几乎就是git clone所做的

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

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

这种状态很不寻常,但很正常。如果运行
git checkout--orphan newbranch
,则将git存储库置于相同的状态:1位于不存在的分支上。在分支名称下存储提交散列后,将创建分支

每当您运行
git checkout
并且没有名为
的分支时,git都会检查是否只有一个远程跟踪分支,例如
origin/
。如果是这样,Git将创建一个名为
的新分支,该分支指向与
origin/
相同的提交,并且具有
origin/
作为其上游

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



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

基本上这是对的,但正如您所指出的,当它是文档化的行为时,您如何将其视为“错误”,我不理解。当然,由于OP使用的是遥控器,并且无论如何都要获取整个内容,所以只需使用
git clone
@MarkAdelsberger,就可以跳过整个空回购问题以及几个不必要的步骤,因为这是不必要的混淆,因为OP显然被
master
混淆了。如果不是bug的话,可能是设计糟糕的特性
git clone
不是通用解决方案。在有些情况下,我们需要在现有存储库中添加一个新的远程服务器,从远程服务器获取数据,然后用它的上游服务器签出一个新的分支。thx很多人,实际上我想知道的是,在运行git init之后,您看到的主服务器并没有完全创建。它不存在,因为它还没有指向任何提交。
U真的帮了我一把。O(∩_∩)O..@ElpieKay-事实上,你不知道为什么它是这样的,这并不意味着它“没有必要”。你不喜欢一个设计并不意味着它是一个bug。一个设计有时会让用户感到困惑的事实并不意味着它是一个bug。至于
clone
,我非常清楚它何时适用,当然也从来没有说过它是通用的;但是,如果你在现有回购协议中添加一个遥控器,那么它就不是一个没有分支和分支的全新回购协议o与这个问题无关。也许你应该停止不必要的争论。@MarkAdelsberger投了赞成票,感谢你的评论。正如我所观察到的,你在Stackoverflow中是一个很好的贡献者。但是,你现在是不是在教我对我每天都在使用的工具有什么感觉?我根据OP的步骤和我的想法给出了一个解决方案ver认为
git clone
是一个糟糕的解决方案。请停止专横。thx。你是传奇人物。因此,在实践中,
git clone
正在做
6\u步骤所做的事情。对吗?明白了。它正在做所有这六个步骤(尽管它可以跳过
mkdir
,如果你让它这样做,它可以使用现有的空目录)。有额外的
git clone
参数可以根据需要修改某些步骤,最后的
git checkout
并不总是用于
master
,但这是通常的模式。