描述有点简洁.我只是在我的本地主分支上添加了一个文件并将其推回到远程仓库.知道为什么会这样吗?
warning: updating the current branch warning: Updating the currently checked out branch may cause confusion, warning: as the index and work tree do not reflect changes that are in HEAD. warning: As a result, you may see the changes you just pushed into it warning: reverted when you run 'git diff' over there, and you may want warning: to run 'git reset --hard' before starting to work to recover. warning: warning: You can set 'receive.denyCurrentBranch' configuration variable to warning: …
当您推送到远程存储库的已签出分支时,通常会收到警告,而Git将不允许您这样做。
但是我暗示git可以将Loeliger的2ed版本从带有Git的Version Control中推送到远程存储库的当前分支,尤其是粗体文本:
推送操作可以更新存储库状态,包括HEAD commit。也就是说,即使远端的开发人员什么也没做,分支引用和HEAD可能会更改,与检出的文件和索引不同步。
积极在发生异步推送的存储库中工作的开发人员将看不到该推送。但是该开发人员的后续提交将发生在意外的HEAD上,从而产生了奇怪的历史记录。强制推送将丢失其他开发人员的推送提交。该存储库中的开发人员还可能发现自己无法与上游存储库或下游克隆协调其历史记录,因为它们不再像应有的那样简单快速。她也不知道为什么:存储库已经从她下面悄悄地更改了。猫和狗将生活在一起。不好
因此,鼓励您仅将其推送到裸仓库中。这不是一成不变的规则,但这对普通开发人员来说是一个很好的指南,被认为是最佳实践。在一些实例和用例中,您可能希望将其推送到开发存储库中,但是您应该完全理解其含义。当您确实要推送到开发存储库时,您可能需要遵循两种基本方法之一。
在第一种情况下,您确实确实希望在接收存储库中有一个工作目录,其中包含一个已检出的分支。例如,您可能知道,没有其他开发人员在那里进行过积极的开发,因此,没有人会因为无声更改被推入其存储库而盲目地站在一边。
在这种情况下,您可能希望在接收存储库中启用一个钩子,以对某个分支(也可能是刚刚推送的分支)执行检入操作。为了在自动检出之前验证接收存储库处于健全状态,挂钩应确保非裸存储库的工作目录不包含任何编辑或修改的文件,并且在推入时其索引中没有处于暂存但未提交状态的文件发生。如果不满足这些条件,则可能会因结帐覆盖而丢失这些编辑或更改的风险。
在另一种情况下,推送到裸机存储库也可以很好地工作。根据协议,每个推送更改的开发人员都必须推送到未签出的分支,该分支仅被视为接收分支。开发人员从不推送到期望被检出的分支。特别是由某些开发人员来管理签出哪个分支以及何时签出。也许那个人负责处理接收分支并将它们合并到主分支,然后再签出。
是否暗示git可以推送到远程存储库的当前分支?(我的猜测是,但是我不确定)
最后一段之前的段落(该段落建议使用钩子来检出通过push更新的分支)是否假定要推送到的分支不是远程存储库中的当前分支?(我的想法是,签出要推送到的分支暗含了要推送到的分支不是当前分支,但是最后一段指出了推送到非签出分支的“不同情况”,这对我意味着上一段是关于推送到已签出分支(即当前分支)的信息