从Subversion迁移后,如何修复损坏的Git历史记录?

从Subversion迁移后,如何修复损坏的Git历史记录?,git,git-svn,Git,Git Svn,根据,我已将项目的Subversion存储库迁移到Git。它工作得非常好,除了有一个分支由于我们历史上对颠覆的错误使用而断开。我不确定用什么术语来描述这个分支的状态。下面是它的样子: trunk: ...-A1---> <---A3----A4-... beta: B1--B2--B3--B4----B5 trunk:…-A1-->您可以使用嫁接来创建假祖先信息。创建文件.git/info/grafts,并将类似的内容放入其中: B1 A1 A4 A

根据,我已将项目的Subversion存储库迁移到Git。它工作得非常好,除了有一个分支由于我们历史上对颠覆的错误使用而断开。我不确定用什么术语来描述这个分支的状态。下面是它的样子:

trunk: ...-A1--->        <---A3----A4-...

beta:         B1--B2--B3--B4----B5

trunk:…-A1-->您可以使用嫁接来创建假祖先信息。创建文件
.git/info/grafts
,并将类似的内容放入其中:

B1 A1
A4 A3 B5
但是,不要使用模式中的提交名称,而是使用它们的完整SHA1。在此之后,请确保历史记录符合您的要求。如果确实如此,您可以通过
git filter branch--all
使移植永久化


当然,这样做会重写历史,如果其他人已经克隆了你的git回购,这是一个坏主意。

git checkout beta
-接受分支

git-rebase A1
-将beta的提交移到A1之上

git签出A4
-切换到A4

git签出-b新建合并点
-为合并创建临时分支

git合并测试版
-合并。可能是冲突

git签出中继线
-返回中继线


git-rebase-new\u-merge\u-point
在A4之后重新应用提交到新合并点。

您知道B1的确切基数吗?Base表示一个提交,
cp
。我在A1和B1树之间做了一个区分。他们一模一样。我想这不是OP想要的。合并已经完成,尝试再次合并很可能只会产生大量冲突。可以使用A4作为参考来解决这些冲突。。。但是,是的,仅手动,可能只是通过A4(或软重置)重写所有文件。看起来你的解决方案更好,但是我不确定我是否理解它是如何工作的。好的,幸运的是有一种方法可以做得更好,使用
我们的
策略:-这是一种记录合并的方法,没有任何更改。因为B1和A1的内容是相同的,所以它们不能被嫁接。我实际上需要把B2移植到A1上。同样,我不得不选择一个更晚的版本来移植到B5上。一旦我得到了正确的版本,这个工作就完美了。