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. 

我search了这个消息,我所能find的只是一个git邮件列表讨论 ,作者试图准确地决定如何使这个消息更好地传达给我,真正的问题是什么。

我是如何造成这种情况的?如何解决这个问题?

发生这种情况时,你推动到一个非裸露的回购。 裸回购是一个完全由.git目录组成; 非裸回购还包括结帐。 一般来说,你不应该推到一个非裸露的回购; 事实上,在未来的git版本中,这将是被禁止的。 如果你推到一个非裸回购,那么回购的HEAD将失去与索引和工作副本的同步。

如果你正在创build一个人们希望推到的git init --bare ,那么你应该使用git init --bare (和git init --bare --shared如果多个用户帐户需要访问它)来创build它,或者git clone --bare如果你是通过克隆现有的回购来创build它。

简而言之,您的远程存储库不再是一个裸机,而是您在远程结帐分支上进行推送。

请参阅“ 如何发布Git存储库 ”:

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

从这里 :

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

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

  • 在你的远程仓库( 像这里描述的那样 )上有一个post-receive钩子,运行“ git checkout -f ”和
  • 忽略警告信息 ( git config receive.denycurrentbranch ignore

在远程仓库上检查git config core.worktreegit config core.bare

我通过克隆一个新的,裸露的,从我的杂乱的存储库中删除裸露的存储库,以防万一,并用我的克隆裸机replace它。

我是新来的混帐,当我build立repsitory时,我忘了使用–bare选项。 感谢你的帮助!

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