如何将一个回购改为另一个回购

dir*_*ofu 10 git version-control merge repository

假设我有两个不同的存储库,如下所示:

Project 1:
Init---A---B---C---HEAD1

Project 2:
Init---D---E---F---G---HEAD2
Run Code Online (Sandbox Code Playgroud)

有没有办法将Project 1(Init to HEAD)重新绑定到Project 2的Init提交,所以它看起来像这样:

Project 1 & 2:
     A---B---C---HEAD1
   /
Init---D---E---F---G---HEAD2
Run Code Online (Sandbox Code Playgroud)

项目1和项目2的内容类似.主要区别在于它们的文件结构略有不同,如下所示:

Project1:

MyProject/
    File1
    File2
    File3

Project2:

MyParentProject/
    MyProject/
        File1
        File2
        File3
    SomeFolder/
    SomeOtherFolder/
    ...etc/
Run Code Online (Sandbox Code Playgroud)

仅供参考:MyProject不是MyParentProject的子模块.MyProject和MyParentProject存在于两个独立的位置,作为两个单独的git存储库.

bob*_*vil 13

您可以将一个视为另一个的远程存储库.在Project1中,运行以下命令:

git remote add project2 <path_to_project_2>
git fetch project2
git branch --track project2Branch project2/master
git checkout project2Branch
Run Code Online (Sandbox Code Playgroud)

使用git log查找该分支的初始提交的哈希值(即Project2).然后跑

git checkout master # or whatever branch you want to rebase
git rebase <hash-for-commit>
Run Code Online (Sandbox Code Playgroud)

您现在已经使用Project2重新命名了Project1.由于这听起来像是一次性操作,您只能使用一个存储库,因此可以使用

git remote rm project2
Run Code Online (Sandbox Code Playgroud)

因此,现在您的主分支使用Project2的init进行重新定义,而project2Branch具有Project2的其余历史记录.这有点像黑客,但它会做你想要的.


Stu*_*art 0

我认为你可以使用git-filter-branch该--parent-filter选项。