git“更新当前签出的分支”警告意味着什么?

时间:2009-04-10 16:25:07

标签: git

当我进行git推送时,我会看到以下内容:

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,作者试图确切地决定如何更好地传达此信息,以便与我沟通真正的问题。

我是如何造成这种情况的,我该如何解决?

3 个答案:

答案 0 :(得分:46)

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

如果您要创建人们想要推送的回购,那么您应该使用git init --bare创建回报(如果有多个用户帐户需要访问权限,则为git init --bare --shared),或{ {1}}如果您是通过克隆现有仓库来创建它。

答案 1 :(得分:12)

简而言之,您的远程存储库不再是一个裸存储库,而是您推动远程结账分支。

请参阅“How to publish a Git repository”:

  

裸存储库是没有签出的代码工作副本的存储库。它只包含git数据库   作为一般规则,您不应该进入包含工作副本更改的存储库   为了确保不会发生这种情况,我们将服务器存储库作为一个裸存储库 - 它没有工作副本

来自here

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

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

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

的值

答案 2 :(得分:5)

我通过克隆一个新的,裸露的存储库使我的存储库裸露出来,保存了混乱的存储库以防万一,并用我克隆的裸存储库替换它。

我是git的新手,当我设置代表时,我忘了使用--bare选项。谢谢你的帮助!

我已经读过O'Reilly git书,现在已经是一个完全的git转换器了。