这就是我在做的事情:
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'?
答案 0 :(得分:6)
在一个全新的存储库中,根本没有分支。
非正常,你在分支master
。同时,分支master
不存在。
这怎么可能?这是一个矛盾的状态:在Git中,分支名称标识该分支的 tip 提交,因此分支名称必须指向某个现有提交。但是没有提交,因此master
不能指向任何提交。
Git通过判断你可以在一个不存在的分支上来解决这个特殊的困境(以及与git checkout --orphan newbranch
相关的困境)。要在分支上,Git只是将该分支的名称存储在HEAD
文件中。然后,一旦你进行提交,分支名称实际上就会存在,指向新的提交 - 这是一个新的 root 提交,即没有父提交。
(这是一个实现细节,你并不是所谓的依赖它,但你可以偷看:cat .git/HEAD
,你会看到它包含ref: refs/heads/master
,表明您在分支机构master
。无论分支master
是否存在,都是如此!阅读HEAD
这样的官方方式是git symbolic-ref HEAD
和{{1}和git rev-parse --symbolic-full-name HEAD
。所有这三种行为方式都略有不同,因此根据人们对分离的HEAD案例的要求,选择使用哪个程序和选项。)
目前,git rev-parse --abbrev-ref HEAD
仅列出实际存在的分支。这可能在将来仍然存在,但是谁知道呢?
答案 1 :(得分:0)
切换到新分支' master'
git checkout -b
创建分支
答案 2 :(得分:0)
我只需要一个初始提交:
C:\Users\myusername\Dropbox\myfolder\myproject\build>git commit -m "Initial commit."
C:\Users\myusername\Dropbox\myfolder\myproject\build>git status
On branch master
nothing to commit, working tree clean
C:\Users\myusername\Dropbox\myfolder\myproject\build>git branch
* master
C:\Users\myusername\Dropbox\myfolder\myproject\build>
现在我可以看到分支“master”,一切正常。