作者:restVerify | 来源:互联网 | 2023-02-03 16:48
这就是我在做的事情:
C:\Users\username\Dropbox\myproject\androidapp\build>git branch -D master
错误:找不到分支'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>
我看到了这样的信息:切换到一个新的分支'master'.为什么新分支'master'不存在,显然我能够切换到分支'master'?
1> torek..:
在一个全新的存储库中,根本没有分支.
非正常,你在分支机构master
.同时,分支master
不存在.
怎么会这样?这是一个矛盾的状态:在Git中,分支名称标识该分支的提示提交,因此分支名称必须指向某个现有提交.但是没有提交,所以master
不能指向任何提交.
Git 通过判断你可以在一个不存在的分支上来解决这个特殊的困境(和相关的困境).要在分支上,Git只是将该分支的名称存储在文件中.然后,一旦你进行提交,分支名称实际上就会存在,指向新的提交 - 这是一个新的根提交,即没有父提交.git checkout --orphan newbranch
HEAD
(这是一个实现细节,你不应该依赖它,但你可以偷看:cat .git/HEAD
你会看到它包含ref: refs/heads/master
,表明你在分支master
.无论分支是否master
存在都是如此!HEAD
像这样读取的是git symbolic-ref HEAD
和git rev-parse --symbolic-full-name HEAD
和git rev-parse --abbrev-ref HEAD
.所有三个都以微妙的不同方式表现,因此可以选择使用哪个程序和选项,具体取决于对分离的HEAD情况的需求.)
目前,git branch
仅列出实际存在的分支.这可能在将来仍然存在,但是谁知道呢?