我在家里的本地网络中的文件服务器上创建了一个裸存储库。 在此之后,我将现有存储库的一个分支从我的桌面PC推送到这个新的远程存储库。
推送工作完美,似乎所有数据都到了(“git branch -va”给了我正确的数据)。 但我不能在裸存储库上使用git log或git show。 我得到了:
fatal: bad default revision 'HEAD'
或根本没有输出
对于裸存储库来说这是正常的吗?还有另一种可能性来形象化一切吗?
编辑: 现在已经解决了致命错误,但我没有收到“git log”或“git log unstable”的输出。桌面PC上的相同命令可以正常工作
答案 0 :(得分:65)
是的,这对于新的裸(和非裸)存储库来说是正常的。
HEAD
是Git称之为符号引用 - 对另一个引用的引用。
在非裸存储库中,HEAD
通常表示当前检出了哪个分支。新提交将导致HEAD
命名的分支被提前以引用新提交。当HEAD
直接引用提交对象而不是分支时,它被认为是分离,这意味着进一步的提交不会导致分支引用被提前引用新的提交(危险)因为签出不同的提交或分支会使任何现有引用无法访问新提交,这使得它们难以查找并受到垃圾回收的影响。)
在裸存储库中,HEAD
表示存储库的默认分支,因此如果git checkout origin
是默认分支,则在存储库git checkout origin/master
的克隆中等效于master
(有关详细信息,请参阅git help rev-parse
。
当Git初始化新存储库时,它会初始化HEAD
以引用refs/heads/master
(换句话说,HEAD
默认指向master
分支。但是,它不会创建名为master
的分支,因为存储库中没有master
指向的提交。
因此,在创建master
分支或更改HEAD
以指向存在的分支之前,在运行查看HEAD
的命令时,您将收到该错误(例如git log
或git show
没有任何参数)。
您仍然可以使用不检查HEAD
的命令。例如:
git log some_branch_that_exists
要删除错误消息,您可以执行以下操作之一:
将HEAD
更改为指向存在的分支:
git symbolic-ref HEAD refs/heads/some_other_branch
master
分支从其他地方推送到存储库在本地创建新的master
分支:
git branch master some_existing_commit
为了可视化存储库中的所有内容,我使用以下内容:
git log --graph --oneline --date-order --decorate --color --all
请注意,即使HEAD
指向不存在的分支,上述命令也会起作用。
答案 1 :(得分:2)
请注意,此消息将随Git 2.6(2015年第3季度/第4季度)
而变化 commit ce11360见Jeff King (peff
)(2015年8月29日)
(Junio C Hamano -- gitster
--合并于commit 699a0f3,2015年9月2日)
最后,该消息将更有意义:
log
:更清楚地诊断空HEAD
如果您初始化或克隆空存储库,则运行"
git log
"的初始消息不是很友好:
$ git init
Initialized empty Git repository in /home/peff/foo/.git/
$ git log
fatal: bad default revision 'HEAD'
让我们检测一下这种情况并写一封更友好的信息:
$ git log
fatal: your current branch 'master' does not have any commits yet
我们还检测到' HEAD'指向破碎的参考;这应该更不常见,但很容易看到 请注意,我们不会诊断所有可能的病例。我们依赖
resolve_ref
,这意味着我们无法获得有关复杂案例的信息。例如,"--default master
"会使用dwim_ref
来查找"refs/heads/master
"但我们只会注意到"master
"不存在。
同样,复杂的sha1表达式如"--default HEAD^2
"将不会作为参考解析。但那没关系。在这些情况下,我们会回到一般性错误消息,无论如何它们都不太可能被使用 抓住一个空的或破碎的#34; HEAD"改善了常见情况,其他情况没有退化。
答案 2 :(得分:0)
当我第一次将repo推送到非主分支时,我遇到了这个错误。
要解决这个问题,我只需要将主人推到回购中,那就是它!