“ git push --mirror”删除了远程标签。有什么办法恢复它们?

rah*_*286 5 git push restore mirror

在跳出来回答之前,请仔细阅读以下内容!

问题:

  1. 我正在研究一个项目(使用git进行版本控制)。
  2. 我创建标签版本2.x和它推到我的远程起源
  3. 该远程源是一个私有镜像,在1.x系列中没有标签。原因 -我们在v2.x中从头开始编码,因此维护1.x仅出于历史原因。
  4. 对此一无所知,我向我们的公共github存储库添加了另一个遥控器。
  5. 我以为可以镜像最新的标签并提交到github(因为我是唯一的开发人员-我没有费心去合并!)

我用了:

git push --mirror
Run Code Online (Sandbox Code Playgroud)

并从Github删除了1.x系列中的所有标签!

现在的情况:

这意味着数据存在于远程...

可能有效的方法:

  1. 如果我可以使用所有日志(包括有关本地已删除的“提交”的日志)克隆Github存储库,那么我的“本地”也将删除已提交。之后,可能是git reflog / rebase / reset练习。

  2. 我假设因为远程git本身就是一个完整的仓库,并且通过SHA1哈希显示提交,所以如果我可以在“远程”上运行git reflog / rebase / reset,那么理论上就可以了。

请注意,我正在寻找纯git方式。我们可以手动下载“标签”(zip),从SVN还原(我们在1.x期间使用SVN)

请让我知道您的建议/解决方法。

rah*_*286 1

我惨痛地了解到 git 中的数据可能会丢失。

我的问题没有答案。我必须做一些手动工作(从旧的 svn 档案中复制旧标签+下载一些压缩版本并标记它们等)

所以,如果你这样做:

  1. 在本地初始化一个 git 存储库,向其中添加一些文件并提交。
  2. 然后更改远程源,然后git push --mirror对远程服务器执行

远程存储库将是本地存储库的完整镜像。如果远程仓库有其他克隆/备份/镜像等,则无法撤消此操作。

当然,我(不小心)所做的是非标准方式,所以 git 不对此负责......