如何将git存储库附加到另一个存储库之上
我正在将一个项目从TFS转换为git,我想保留所有的历史记录 问题是TFS项目在一年前被转移到TFS。 使用git tfs,我可以将这两个位置转换为git,但现在我有两个git存储库:A和B 我已经设法将A和B作为不同的分支放在同一个存储库中。是否可以将B中第一次提交的父级更改为A中的最后一次提交如何将git存储库附加到另一个存储库之上,git,tfs,tfvc,git-tfs,Git,Tfs,Tfvc,Git Tfs,我正在将一个项目从TFS转换为git,我想保留所有的历史记录 问题是TFS项目在一年前被转移到TFS。 使用git tfs,我可以将这两个位置转换为git,但现在我有两个git存储库:A和B 我已经设法将A和B作为不同的分支放在同一个存储库中。是否可以将B中第一次提交的父级更改为A中的最后一次提交 Branch A: a -> b -> c Branch B: d -> e -> f 我想要 a -> b -> c -> d' -> e' -&g
Branch A: a -> b -> c
Branch B: d -> e -> f
我想要
a -> b -> c -> d' -> e' -> f'
解决方案:
git filter-branch --parent-filter 'sed "s/^\$/-p <last-commit-in-A>/"' HEAD_OF_B
git筛选器分支--父筛选器“sed”s/^\$/-p/”头
当然,设置一个移植物
,它正好可以做到这一点。如果您对结果感到满意,可以执行过滤器分支
,以永久性地执行此操作。或者您可以立即使用过滤器分支
和--父过滤器
我可以想出两种解决方案:
$ git remote add repoB <directory where repo B is located>
(如果这样做更有意义,您可以用另一种方法:将repo A作为远程添加到repo B。同样的概念也适用。)这不起作用,因为git存储库不共享历史。A的最后一次提交和B的第一次提交具有完全相同的内容。但它们的SHA1哈希值不一样。这两份回购协议都是从TFS转换而来的。@sigol“不起作用”是什么意思?我使用了
git merge
作为示例。也许git-rebase
更适合您的情况。我认为git-merge
或git-rebase
不起作用,因为这两个分支有不相关的提交。分支机构A:A->b->c分支机构b:d->e->f这两个早午餐有完全不相关的历史。我想要这个历史a->b->c->d'->e'->f'我不能使用rebase,因为rebase将删除合并提交。好的,merge
可以使用--allow unrelated histories
开关与无关历史一起使用,但这并不是您实际需要的情况。如果您使用--on
开关,则重设基址
可以用于任何历史记录,但也不是您想要的情况。您还可以使用保留合并
进行重基
保留合并提交,这可能会产生您想要的结果,尤其是在您不重新排序提交的情况下。但是,在你的情况下,这不是你想要的。:-)
$ git checkout master
$ git pull repoB master