【发布时间】:2015-03-19 01:21:38
【问题描述】:
勉强避免了一场国际事件。我们的一位开发人员执行了git push origin --prune(而不是git fetch origin --prune!)
这导致远程存储库上的所有远程分支都被删除(当然,除了当前分支之外的所有分支)。
幸运的是,尚未获取另一个开发人员的克隆,因此我可以重新推送所有远程分支。
这对我来说似乎相当危险;有没有办法防止这种情况发生,或者至少让它更难做?
【问题讨论】:
-
你总是可以从 reflog 中恢复所有分支的状态,所以看起来并不那么危险。实际的提交不会从对象存储中删除,只有指向头的指针。
-
@SvenMarnach - 是的,我知道只有指向头部的指针被移除。 reflog 似乎没有包含任何有用的信息。只是在我们的情况下并不危险,因为我可以从另一个克隆中恢复分支。
-
reflog 仅包含之前已提取到本地克隆的分支的信息。除非您指定非标准 refspec,否则这应该是所有这些。尝试例如
git reflog remotes/origin/master用于获取到本地克隆的某些分支。如果您实际上在服务器上有从未被提取到任何克隆的分支(如何?),您可能确实会丢失指向它们的头指针。