git - 如何将一个 repo rebase 到另一个

标签 git version-control merge repository

假设我有两个不同的存储库:

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

Project 2:
Init---D---E---F---G---HEAD2

有没有办法将项目 1(Init 到 HEAD) rebase 到项目 2 的 Init 提交,所以它看起来像这样:

Project 1 & 2:
     A---B---C---HEAD1
   /
Init---D---E---F---G---HEAD2

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

Project1:

MyProject/
    File1
    File2
    File3

Project2:

MyParentProject/
    MyProject/
        File1
        File2
        File3
    SomeFolder/
    SomeOtherFolder/
    ...etc/

仅供引用:MyProject 不是 MyParentProject 的子模块。 MyProject 和 MyParentProject 作为两个独立的 git 存储库存在于两个不同的位置。

最佳答案

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

git remote add project2 <path_to_project_2>
git fetch project2
git branch --track project2Branch project2/master
git checkout project2Branch

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

git checkout master # or whatever branch you want to rebase
git rebase <hash-for-commit>

您现在已将 Project1 重新设置为 Project2 的基础。由于这听起来像是一次性操作,您将只使用一个存储库,因此您可以使用

git remote rm project2

因此,现在您的 master 分支已使用 Project2 的 init 进行了重新设置,并且 project2Branch 具有 Project2 的其余历史记录。这有点像 hack,但它会做你想做的事。

关于git - 如何将一个 repo rebase 到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2247487/

相关文章:

version-control - 分支和合并策略

git - 如何列出自 X 日期以来匹配模式的标签?

git - 上传一个空文件夹到github

SVN 到 Git 导入问题使用 "git svn clone"

.net - 在 SVN 中组织共享 .net 程序集的最佳方式是什么?

linux - 更新派生文件以包含原始文件的更改

c++ - 在没有 svn :externals 的项目之间共享代码

git - 如何在不覆盖当前更改的情况下将文件恢复到以前的版本?

node.js - 如何使用多个嵌套的私有(private) Node 模块?

git - 不小心从错误的分支分支出来,当我想 merge 到主分支时,我必须 merge 两个分支