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

时间:2017-05-17 21:34:08

标签: git

这就是我在做的事情:

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'?

3 个答案:

答案 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”,一切正常。