Git - 意外地覆盖了远程存储库的整个提交历史

时间:2011-05-23 18:40:06

标签: svn git git-svn

为了在Git和SVN之间创建一个桥梁,允许一个项目的开发人员使用SVN和另一个项目的开发人员使用Git,我无意中覆盖了远程存储库中的整个git提交历史记录。这是导致错误的基本工作流程。

  1. 克隆远程Git存储库
  2. 按照一系列命令将Git repo导入SVN。

    一个。我尝试了通过stackoverflow找到的各种方法以及使用本地SVN存储库作为测试的其他几个位置。他们中的大多数都失败了,因为我正在对他们进行Git回购。但是,在http://eikke.com/importing-a-git-tree-into-a-subversion-repository/找到的一组步骤似乎是成功的,所以这些是我最后使用的。

    湾这只是半成功的。导入到SVN尝试获取所有git提交历史记录并将其作为SVN提交日志导入,但在大约2 / 3rds的时候失败。最后三分之一作为单个提交提交到SVN。此外,所有提交日期都被当前日期覆盖,并且大部分作者被覆盖。鉴于这是在SVN回购中,而不是实际的Git回购,我并不太关心。

  3. 如果有人从SVN检出代码,进行更改并提交。
  4. 使用git svn获取更改
  5. 将更改推送到远程存储库。
  6. 最终结果是整个提交历史记录被SVN中的内容覆盖。因此,提交日期和作者已更改,并且提交历史记录的最后1/3丢失。有可能恢复吗?

    如果没有,我找到了我在进程中间某处创建的本地存储库的备份。它似乎具有所有原始提交历史记录。是否有可能以某种方式使用本地备份中的内容覆盖远程存储库上的提交数据?

1 个答案:

答案 0 :(得分:1)

如果您将更改推送到遥控器,则您没有真正覆盖任何内容;毕竟它是版本控制。您应该能够通过将HEAD重置到您执行任何操作之前的位置来恢复远程状态。假设我没有误解你做了什么,你真正需要做的就是

git checkout <SHA-of-old-head>
git add -A
git commit
git push

......你会回到你开始的地方,虽然你的搞砸将保留在遥控器的历史中。如果您不想这样做,则需要直接使用遥控器并将HEAD移回原位。