在跳到回答之前,请仔细阅读这个乱七八糟的内容!
问题:
- 我正在做一个项目(使用 git 进行版本控制)。
- 我创建了标签 v2.x 并将其推送到我的远程 origin。
- 这个远程源是一个私有(private)镜像,在 1.x 系列中没有标签。 原因 - 我们在 v2.x 中从头开始编码,因此保留 1.x 只是出于历史原因。
- 没有意识到这一点,我在我们的公共(public) github 存储库中添加了另一个 Remote 。
- 我想让我们镜像最新的标签并提交到 github(因为我是唯一的开发者 - 我没有费心去 merge !)
我用过:
git push --mirror
并且它从 Github 中删除了 1.x 系列中的所有标签!
现状:
- 我经常用谷歌搜索,阅读 git 手册。尝试运行 git reflog/reset/rebase 但无法恢复任何内容。
- 我的本地环境。自从我们在 2.x 中从头开始以来,没有与标记 1.x 相关的提交
- 即使到目前为止我还没有恢复任何东西,我还是在 Github 上看到了远程提交。例如 https://github.com/rtCamp/buddypress-media/commit/4614fcdacfbe21dae88e50e66707ef57b786ee37
这意味着数据存在于远程......
什么可能有效:
如果我可以克隆带有所有日志的 Github 存储库,包括有关本地已删除“提交”的日志,那么我的“本地”也会删除提交。之后可能是 git reflog/rebase/reset 练习。
我假设远程 git 是一个完整的 repo 本身及其 showing commits by SHA1 hashes ,如果我可以在“远程”上运行 git reflog/rebase/reset 理论上可能会起作用。
请注意,我正在寻找纯 git 方式。我们可以手动下载“标签”(zip),从 SVN 恢复(我们在 1.x 期间使用 SVN)
请让我知道您的建议/解决方法。
最佳答案
我通过艰难的方式了解到 git 中的数据可能会丢失。
我的问题没有答案。我不得不做一些手工工作(从旧的 svn 文件复制旧标签 + 下载一些压缩版本并标记它们等)
所以,如果你这样做:
- 在本地初始化一个 git 仓库,添加一些文件并提交。
- 然后更改远程源然后执行
git push --mirror
到远程服务器
远程仓库将是您本地仓库的完整镜像。如果远程仓库有其他克隆/备份/镜像等,则无法撤消此操作。
当然,我(不小心)做的是非标准方式,所以 git 不对此负责...
关于git - "git push --mirror"删除远程标签。有什么方法可以恢复它们吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12264242/