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

时间:2012-09-04 13:12:51

标签: git push restore mirror

在开始回答之前,请仔细阅读这个混乱!

问题:

  1. 我正在开发一个项目(使用git进行版本控制)。
  2. 我创建了标记v2.x并将其推送到我的远程 origin
  3. 此远程源是一个私有镜像,在1.x系列中没有标签。 原因 - 我们在v2.x中从头开始编码,因此仅出于历史原因维护1.x.
  4. 没有意识到这一点,我在我们的公共github回购中添加了另一个遥控器。
  5. 我想让镜像最新的标签并提交给github(因为我是唯一的开发人员 - 我没有费心合并!)
  6. 我用过:

    git push --mirror
    

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

    现状:

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

    可行的方法:

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

    2. 我假设因为远程git是一个完整的repo本身及其showing commits by SHA1 hashes,如果我可以在“远程”事件上运行git reflog / rebase / reset,理论上可能会有效。

    3. 请注意我正在寻找纯粹的git方式。手动我们可以下载“标签”(拉链),从SVN恢复(我们在1.x期间使用SVN)

      请告诉我您的建议/解决方法。

3 个答案:

答案 0 :(得分:1)

我很难理解git中的数据可能会丢失。

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

所以,如果你这样做:

  1. 在本地初始化git repo,在其中添加一些文件并提交它。
  2. 然后更改远程源,然后git push --mirror到远程服务器
  3. 远程仓库将成为您当地仓库的完整镜像。如果远程repo具有其他克隆/备份/镜像等,则无法撤消此操作。

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

答案 1 :(得分:-1)

这是撤消git push -mirror

的非常相关的解决方案

How to undo "git push --mirror"?

答案 2 :(得分:-1)

git push --tags来自另一个具有所有先前标记的本地git存储库会有所帮助。