【问题标题】:What does git "updating currently checked out branch" warning mean?git“更新当前签出的分支”警告是什么意思?
【发布时间】:2010-10-18 19:09:53
【问题描述】:

当我执行 git push 时,我看到以下内容:

warning: updating the currently checked out branch; this may cause confusion,
as the index and working tree do not reflect changes that are now in HEAD.

我在 Google 上搜索了这条消息,我只能找到 git mailing list discussion,作者试图准确地决定如何让这条消息更好地向我传达真正的问题是什么。

这是怎么造成的,我该如何解决?

【问题讨论】:

标签: git


【解决方案1】:

当您推送到非裸仓库时会发生这种情况。裸仓库是仅包含 .git 目录的仓库;非裸回购还包括结帐。一般来说,你不应该推送到非裸仓库;事实上,在未来版本的 git 中,这将被禁止。如果您推送到非裸仓库,则该仓库的 HEAD 将与索引和工作副本不同步。

如果您要创建一个人们想要推送的存储库,那么您应该使用git init --bare(如果有多个用户帐户需要访问它,则使用git init --bare --shared)创建它,或者如果您使用git clone --bare '通过克隆现有的 repo 来创建它。

【讨论】:

  • 谢谢。这个重要的警告告诉我我被克隆并推送到错误的存储库!我有一个裸存储库,与我意外克隆的另一个存储库的名称类似!
  • 是否可以从非裸仓库拉取到非裸仓库。我猜不是?
  • @Keyo 是的,可以从一个非裸仓库拉到另一个仓库。但你不应该推动非裸回购。
  • 其实你可以推送到非裸仓库就好了,只是不能推送到当前签出的分支
  • @Nowhereman 这是真的,我的回答有点简化。一般来说,不鼓励推送到非裸仓库,即使只推送到当前结帐分支实际上会破坏任何东西。如果你发现自己推送到一个非裸仓库,这可能意味着你做错了什么。
【解决方案2】:

简而言之,您的远程存储库不再是一个光秃秃的存储库,而您正在推动远程结帐分支。

见“How to publish a Git repository”:

裸存储库是没有检出代码工作副本的存储库。它只包含 git 数据库。
作为一般规则,您永远不应该将工作副本中的更改推送到包含更改的存储库中。
为确保不会发生这种情况,我们将服务器存储库设为裸存储库 - 它没有工作副本

来自here

请注意,“推送”的目标通常是存储库(即没有自己的工作树)。
您还可以推送到具有签出工作树的存储库,但工作树 不会被推送更新。
如果您推送到的分支是当前签出的分支,这可能会导致意外结果。

如果定义了分离的工作树(例如可以对应于 Web 服务器的 DocumentRoot),您需要:

在您的远程存储库中检查git config core.worktreegit config core.bare 的值

【讨论】:

【解决方案3】:

我通过从我的混乱存储库中克隆一个新的、裸露的存储库来使我的存储库裸露,保存混乱的存储库以防万一,然后用我克隆的裸存储库替换它。

我是 git 新手,在设置存储库时,我忘记使用 --bare 选项。感谢您的所有帮助!

我已经阅读了 O'Reilly 的 git 书,现在完全是 git convert 了。

【讨论】:

    猜你喜欢
    • 2020-10-15
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 2010-10-25
    • 2011-09-25
    • 1970-01-01
    • 2020-04-03
    相关资源
    最近更新 更多