为什么“ git status”显示我在master分支上,而“ git branch”不在新创建的存储库中?

时间:2019-07-16 06:15:06

标签: git

我正在尝试使过程自动化并发出git branch命令以找出我所在的分支。除了新初始化的仓库(git branch不返回任何内容)之外,其他一切都工作正常。鉴于我对仓库没有做任何事情,甚至没有执行最初的提交,我都可以接受答案。但是,如果我运行git status,它会告诉我我在master分支上,如下所示:

$ mkdir todelete
$ cd todelete
$ git init
Initialized empty Git repository in /u/u70021a/todelete/.git
$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)
$ git branch
$

我做错什么了吗?有没有我没有正确设置的设置?

我也有很多Git的新人,我无法向他们解释为什么显示他们所在分支的命令什么都没显示,而status命令却显示了。

5 个答案:

答案 0 :(得分:73)

我还提出了另外两个答案,但是我认为思考这个问题的方法很简单:您可以位于不存在的分支上。这是 normal 一个新的空存储库,因为要存在一个分支名称,该分支名称​​必须标识现有有效提交的哈希ID。一个新的空存储库没有提交,因此尚不存在任何分支名称。

不过,起初,您位于 some 分支上。您所在的分支是其名称存储在特殊名称HEAD中的分支。在新的空存储库中,Git在master中存储名称refs/heads/master(更确切地说,HEAD-分支的全名),因此您位于master上,而master不存在。

您可以使用git checkout -b更改您所在的不存在的分支:

$ git init
Initialized empty Git repository in [path]
$ git checkout -b asdf
Switched to a new branch 'asdf'
$ git checkout -b hello
Switched to a new branch 'hello'

每当您在不存在的分支上时,您进行的下一次提交都会创建git checkout --orphan的工作方式也是如此。

答案 1 :(得分:14)

git branch由于没有分支,因此什么也不显示。但是,正如您在man git init中所读到的:

  

此命令创建一个空的Git存储库-基本上是一个.git目录,其中包含对象的子目录,          参考/标题,参考/标签和模板文件。 一个初始HEAD文件,该文件引用了主文件的HEAD          分支也会创建。

我加粗了我认为相关的部分-看起来虽然还没有master分支,但已经存在对其的引用,这就是为什么它在git status中显示。提交后将创建一个适当的分支。

答案 2 :(得分:11)

分支尚未诞生。因此,git branch不会显示它(git symbolic-ref HEAD表示您的HEAD指向默认的分支主机,并且由于git branch没有显示它而没有出生,也就是说,您可以在尚不存在的分支上)。但是,提交内容会创建分支。

如果您签出orphan分支,情况也是如此。

我想git status显示了分支名称,因为这是将要创建的分支。

有关脚本的信息,请参见How to programmatically determine the current checked out Git branch

答案 3 :(得分:11)

现有的答案解决了字面上的问题,即输出为何如此,但我认为它们已经掩盖了实际问题...

您说过要自动化,所以我建议git statusgit branch都不是脚本上下文中的最佳工具。

在此讨论中可以找到一些替代方法:How to programmatically determine the current checked out Git branch

在不知道您的需求(或您希望未出生分支的行为方式)的情况下,我不一定会提出建议,但是我要讲的是,一些命令是用于人机交互(瓷器)的,而另一些是用于脚本(管道)

答案 4 :(得分:-1)

在git中,默认分支为 master 。 当您提交git时,它将“使用”您当前所在的当前分支。 由于您已经初始化了一个新的存储库,因此您位于“默认”分支上,这就是为什么您没有在分支列表中看到它的原因,所以一旦您提交更改,它就会显示出来。

enter image description here

enter image description here