有一个带master
分支的git存储库,有几个开发人员正在使用它(他们无法访问git-server,但可以推送到master
分支)。我的问题是:开发人员无论如何不可逆转地“损坏”(删除文件......)存储库?
例如,开发人员可以删除最近10次提交:
git reset --hard HEAD~10
git push -f
在这种情况下有没有办法恢复数据(假设没有人在本地进行最后10次提交)?如果是这样,有没有其他方法如何对回购进行不可逆转的更改?
答案 0 :(得分:7)
“不可逆转”总是难以判断。假设开发人员不是该存储库中唯一的开发人员,我们可以假设还有其他开发人员也拥有本地存储库 - 这是一个完整的副本 - 因此可以始终恢复丢失的更改。
但总的来说,是的,如果远程服务器不拒绝此类操作,则可能会破坏整个存储库。一些托管解决方案提供针对此的保护(不是针对恶意使用,而是为了避免意外),您可以将强制推送配置为拒绝。但推力只是一件事;实际上可以使用git push -d origin branch
删除远程分支。因此,您也需要防止删除分支(至少关键,如主人)。
但是我们假设所有这些都是出于某种原因而且有人设法强制推送对存储库的引用,这使得某些提交无法访问。假设一个默认的裸存储库 - 许多解决方案仍然在引擎盖下使用 - 同样适用于任何本地存储库:对象不会立即被删除但只是无法访问。无法访问的对象使它们进行垃圾收集,这可能会永久删除它们。因此,如果垃圾收集尚未在远程服务器上运行,则对象可能仍在那里。
一般规则仍然适用:进行备份。对于Git,这可以像定期更新本地克隆一样简单。
答案 1 :(得分:0)
我开发了一天,停电杀了我的回购。这是一个不可逆转的损害,因为我没有把它推到私人git服务器/ github / gitlab,因为我很懒,我对自己说,“我将会做到#34; tommorow我会做到这一点"。幸运的是,只有.git已经死了,代码本身并没有被破坏。我重新启动了git,之后我在gitlab上创建了一个私人仓库。
所以我的答案是:如果你不在git服务器上进行备份,任何东西都可能损坏那个回购:笔记本上的咖啡/可乐/啤酒,猫躺在你的键盘上,甚至在你的公寓里掉了十层楼之后Windows崩溃