为什么我在Git上创建的分支没有出现?

Jai*_*oya 1 git

这就是我在做的事情:

C:\Users\username\Dropbox\myproject\androidapp\build>git branch -D master
Run Code Online (Sandbox Code Playgroud)

错误:找不到分支'master'.

C:\Users\username\Dropbox\myproject\androidapp\build>git checkout -b master
Switched to a new branch 'master'

C:\Users\username\Dropbox\myproject\androidapp\build>git branch

C:\Users\username\Dropbox\myproject\androidapp\build>git branch -a

C:\Users\username\Dropbox\myproject\androidapp\build>
Run Code Online (Sandbox Code Playgroud)

我看到了这样的信息:切换到一个新的分支'master'.为什么新分支'master'不存在,显然我能够切换到分支'master'?

tor*_*rek 6

在一个全新的存储库中,根本没有分支.

非正常,你在分支机构master.同时,分支master不存在.

怎么会这样?这是一个矛盾的状态:在Git中,分支名称标识该分支的提示提交,因此分支名称必须指向某个现有提交.但是没有提交,所以master不能指向任何提交.

Git 通过判断你可以在一个不存在的分支上来解决这个特殊的困境(和相关的困境).要在分支上,Git只是将该分支的名称存储在文件中.然后,一旦你进行提交,分支名称实际上就会存在,指向新的提交 - 这是一个新的提交,即没有父提交.git checkout --orphan newbranchHEAD

(这是一个实现细节,你不应该依赖它,但你可以偷看:cat .git/HEAD你会看到它包含ref: refs/heads/master,表明你在分支master.无论分支是否master存在都是如此!HEAD像这样读取的是git symbolic-ref HEADgit rev-parse --symbolic-full-name HEADgit rev-parse --abbrev-ref HEAD.所有三个都以微妙的不同方式表现,因此可以选择使用哪个程序和选项,具体取决于对分离的HEAD情况的需求.)

目前,git branch仅列出实际存在的分支.这可能在将来仍然存在,但是谁知道呢?