我刚刚创建了一个全新的git存储库:
git init
现在我想看看我所在的分支。所以,我执行:
git branch
这个命令没有输出任何东西(我的期望是我只会看到一个分支“master”,我会在那里)。
所以,我想根本就没有分支。所以,我尝试通过以下方式创建一个分支:
git checkout -b aaa
结果我看到了:
Switched to a new branch 'aaa'
但是当我执行
时git branch
我再没有输出。那么,我如何验证我是否在特定的分支中?
答案 0 :(得分:6)
你可以做git status
。
第一行将是:On branch aaa
。
答案 1 :(得分:2)
fr3dch3n's answer正确无误git status
将告诉您您所在的分支 - 但未解决为什么 git branch
根本没有显示任何内容。原因是你处于特殊状态。
您刚刚创建了一个新的空存储库 - 一个完全没有提交的存储库 - 通过执行git init
。
现在,关于Git中的分支名称的事情是它们总是总是 -point到一个特定的提交。但是你根本没有提交,那么分支名称如master
或aaa
如何指向一个?
答案是它不能,所以它没有,而Git通过没有创建分支来实现这一点。很简单,你就是一个不存在的分支。
当存储库是新的并且完全没有提交时,会发生此特殊状态 ,但如果您使用git checkout --orphan <newbranch>
,也会发生此情况。这将使您首先创建分支的新分支,以便新分支不存在。
如果分支不存在,但您在git status
术语中“开启”该分支,并且您运行git commit
,Git会像往常一样创建新提交, 1 < / sup>并且在进程结束时,Git更新当前分支名称,以便它指向刚刚进行的新提交。如果之前的分支不存在,现在就可以了!
因此,在一个新的空存储库中,您所在的分支不存在,并且使用git checkout -b
切换到另一个新分支会使您继续不存在的另一个新分支。你所在的分支,它不存在,只是消失得无影无踪:它永远不存在,它只是一个幽灵,你在“上”,现在你在新的和不同的幻影。
(同样的事情发生在git checkout --orphan <newbranch>
之后:它会让你进入这种幽灵般的不存在的分支,然后如果你切换到另一个新的分支,你继续处于一个幽灵般的不存在如果git checkout master
本身成功,运行git checkout
或使用任何实际现有分支的名称将切换回现有分支。)
1 git commit
过程的工作原理如下,尽管各个步骤的确切顺序有些变化,git commit --only <files>
等选项会发生更大的变化。
git write-tree
命令。)git commit-tree
)。实际创建分支的步骤6,在这个特殊的“尚未创建的分支”条件下。
请注意,在步骤4中,“找出父母”,Git会注意到这个“尚未创建的分支”条件。这种情况的结果是新提交有 no 父级:新提交是 root 提交。但是,通常,步骤4读取HEAD
,目的是找到当前提交的哈希ID:HEAD
包含分支名称,分支确实存在并包含当前提交哈希ID。
在解决来自git merge
的冲突后提交合并结果时,步骤4使用git merge
留下的跟踪文件来确定额外的父提交哈希(正常合并)或哈希(“章鱼”)合并)。像往常一样,当前或HEAD或@
提交仍然是第一个父级。