6

在跳回答之前,请仔细阅读这个烂摊子!

问题:

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

我用了:

git push --mirror

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

现在的情况:

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

什么可能有效:

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

  2. 我假设由于远程 git 本身就是一个完整的存储库,并且它通过 SHA1 哈希显示提交,如果我可以在“远程”上运行 git reflog/rebase/reset,理论上可能会起作用。

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

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

4

3 回答 3

1

我很难学到 git 中的数据可能会丢失。

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

所以,如果你这样做:

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

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

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

于 2012-09-29T17:48:07.827 回答
-1

这是 undoing 的一个非常中肯的解决方案git push -mirror

如何撤消“git push --mirror”?

于 2012-09-04T13:14:52.647 回答
-1

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

于 2018-08-10T23:34:46.970 回答