【问题标题】:git log and show on a bare repogit log 并显示在一个裸仓库上
【发布时间】:2011-09-07 01:37:14
【问题描述】:

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

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

fatal: bad default revision 'HEAD'

或者根本没有输出

这对于裸存储库是否正常?还有另一种可视化一切的可能性吗?

编辑: 致命错误现在已解决,但我没有收到“git log”或“git log不稳定”的输出。桌面电脑上的相同命令完美运行

【问题讨论】:

  • 试试 git update-ref HEAD 分支名
  • @William:你想要git symbolic-ref HEAD branch-name。你的将使HEAD 成为一个普通的参考。
  • 您将在 Git 2.6+(2015 年第三季度/第四季度)看到不同的错误消息:请参阅 my answer below

标签: git


【解决方案1】:

是的,这对于新的裸(和非裸)存储库是正常的。

说明

HEAD 是 Git 所说的符号引用——对另一个引用的引用。

在非裸仓库中,HEAD 通常表示当前签出的分支。新的提交将导致以HEAD 命名的分支被推进以引用新的提交。当HEAD 直接引用提交对象而不是分支时,它被认为是分离的,这意味着进一步的提交不会导致分支引用被推进以引用新的提交(危险,因为检查一个不同的提交或分支将导致任何现有引用都无法访问新的提交,从而使它们难以找到并受到垃圾回收的影响)。

在裸存储库中,HEAD 表示存储库的默认分支,因此如果master 是默认分支,则在存储库的克隆中git checkout origin 等效于git checkout origin/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 指向一个不存在的分支,上述命令也会起作用。

【讨论】:

  • 您还可以提及git log branchnamegit show branchname 将起作用
  • @RichardHansen 最后一行将我的理解提升到了一个全新的水平。非常有帮助!谢谢。
【解决方案2】:

请注意,此消息将随着 Git 2.6(Q3/Q4 2015)而改变

参见 Jeff King (peff)commit ce11360(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”指向损坏的 ref 的情况;这应该更不常见,但很容易看到。
请注意,我们不会诊断所有可能的情况。我们依赖resolve_ref,这意味着我们无法获得有关复杂案例的信息。例如,“--default master”将使用 dwim_ref 来查找“refs/heads/master”,但我们只注意到“master”不存在。
同样,像“--default HEAD^2”这样的复杂 sha1 表达式也不会解析为 ref。

不过没关系。在这些情况下,我们会退回到通用错误消息,并且无论如何都不太可能使用它们。
捕获一个空的或损坏的“HEAD”会改善常见情况,而其他情况不会回归。

【讨论】:

    【解决方案3】:

    当我第一次将非主分支推送到 repo 时,我遇到了这个错误。

    为了解决这个问题,我只需要将 master 推送到 repo 就可以了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-03
      • 2011-10-06
      • 1970-01-01
      • 2013-03-08
      • 2019-07-15
      • 2018-08-26
      • 1970-01-01
      相关资源
      最近更新 更多