这就是我在做的事情:
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'?
在一个全新的存储库中,根本没有分支.
非正常,你在分支机构master.同时,分支master不存在.
怎么会这样?这是一个矛盾的状态:在Git中,分支名称标识该分支的提示提交,因此分支名称必须指向某个现有提交.但是没有提交,所以master不能指向任何提交.
Git 通过判断你可以在一个不存在的分支上来解决这个特殊的困境(和相关的困境).要在分支上,Git只是将该分支的名称存储在文件中.然后,一旦你进行提交,分支名称实际上就会存在,指向新的提交 - 这是一个新的根提交,即没有父提交.git checkout --orphan newbranchHEAD
(这是一个实现细节,你不应该依赖它,但你可以偷看: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仅列出实际存在的分支.这可能在将来仍然存在,但是谁知道呢?
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |