git日志和裸露的回购显示

时间:2011-06-02 12:49:49

标签: git

我在家里的本地网络中的文件服务器上创建了一个裸存储库。 在此之后,我将现有存储库的一个分支从我的桌面PC推送到这个新的远程存储库。

推送工作完美,似乎所有数据都到了(“git branch -va”给了我正确的数据)。 但我不能在裸存储库上使用git log或git show。 我得到了:

fatal: bad default revision 'HEAD'

或根本没有输出

对于裸存储库来说这是正常的吗?还有另一种可能性来形象化一切吗?

编辑: 现在已经解决了致命错误,但我没有收到“git log”或“git log unstable”的输出。桌面PC上的相同命令可以正常工作

3 个答案:

答案 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 loggit 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 ce11360Jeff 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推送到非主分支时,我遇到了这个错误。

要解决这个问题,我只需要将主人推到回购中,那就是它!