Git - 意外覆盖了远程仓库的所有提交历史

3
为了在一个项目中让开发人员使用SVN,而在另一个项目中让开发人员使用Git,我试图创建一个Git和SVN之间的桥梁,结果不小心覆盖了远程存储库中的整个git提交历史记录。以下是导致错误的基本工作流程。
1. 克隆远程Git存储库 2. 按照一系列命令将Git repo导入到SVN中。 a. 我尝试了一些在stackoverflow和其他几个地方找到的方法,使用本地SVN存储库进行测试。大多数都失败了,因为它们无法适应我正在运行的Git repo。但是,在http://eikke.com/importing-a-git-tree-into-a-subversion-repository/上找到的一组步骤似乎是成功的,所以最终我使用了这些步骤。 b. 这只是部分成功。导入到SVN中的操作尝试获取所有git提交历史记录并将其作为SVN提交日志导入,但在完成约三分之二后失败了。最后的三分之一被作为单个提交提交到SVN。此外,所有提交日期都被当前日期覆盖,并且大部分作者都被覆盖。由于这是在SVN存储库而不是实际的Git存储库中,我并不太担心。 3. 让其他人从SVN检出代码,进行更改并提交。 4. 使用git svn获取更改 5. 推送更改到远程存储库。
最终结果是整个提交历史记录被覆盖为现在在SVN中的内容。因此,提交日期和作者已更改,并且提交历史记录的最后三分之一丢失了。是否有可能恢复?
如果不能,我在过程中找到了一个本地存储库的备份。它似乎具有所有原始提交历史记录。是否可能以某种方式使用此本地备份覆盖远程存储库中的提交数据?
1个回答

1
如果您将更改推送到远程,则实际上没有覆盖任何内容;毕竟它是版本控制。您应该能够通过将HEAD重置为您做任何操作之前的位置来恢复远程状态。假设我没有误解您所做的事情,您真正需要做的只是像这样做:
git checkout <SHA-of-old-head>
git add -A
git commit
git push

......然后你就会回到起点,尽管你的错误操作仍会留在遥控器的历史记录中。如果你不想这样,你需要直接在遥控器上工作,并将HEAD移回原来的位置。


事实证明,svn将所有Git提交作为单独的SVN提交导入。git svn fetch检索了所有这些提交,而git push将它们作为新提交推送到远程Git存储库中。这导致了大量的提交,看起来像日志中的原始提交,但实际上是原始提交的副本。这就是我认为历史记录已被覆盖的原因。感谢您的帖子,它引导了我走向正确的方向。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接