git - 如何从另一个具有不同历史记录的存储库重新提交提交?

标签 git version-control merge rebase

我们有两个 Git 存储库。

存储库 1。提交:A、B、C。此存储库是根据 SVN 历史创建的。

Repo 2. 提交:D、E、F。这个存储库是在没有 SVN 历史记录的情况下创建的,只是使用成为提交 D 的工作副本(从提交 C 开始)。换句话说,提交的文件树C和D是一样的。

现在,我们想要 merge 两个存储库,以便我们在一个存储库中拥有完整的历史记录。有没有办法将所有提交的 E..F“复制/ rebase /其他”到 C?

最佳答案

最简单的做法是将 Repo 2 添加为 remoteRepo 1 中使用它在磁盘上的物理路径 然后简单地 cherry pickC 之上提交 EF

因此,在 Repo 1 中,您可以:

git remote add repo2 C:\Path\To\Repo2
git fetch repo2

然后,假设 EFRepo 2master 分支中的最新两个提交,并且CRepo 1master 中的最新提交,如下所示:

      master
     /
A-B-C
      repo2/master
     /
D-E-F

你会这样做:

git checkout master
git cherry-pick repo2/master~2..repo2/master

这将在 C 之上应用提交 EF 的补丁:

           master
          /
A-B-C-E'-F'
      repo2/master
     /
D-E-F

请注意,我在这里挑选了一个提交范围,这是受支持的 since Git 1.7.2 .

关于git - 如何从另一个具有不同历史记录的存储库重新提交提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37673813/

相关文章:

git - 我可以为 git 使用脚本化提交模板吗?

git - 我如何编辑一个包含数百个 merge 和 merge 冲突的 Git 提交?

version-control - 哪些 NetBeans 项目文件应进入源代码管理?

r - 模糊字符串匹配与合并

C 横坐标拟合长度算法

javascript - 为什么 Javascript 项目将构建的结果检查到 git 中?

git - 在 Git 中找不到远程引用 HEAD

GitLab PHP网站部署

version-control - 源代码控制概念 - 每个功能分支,每个 checkin 标记

git - 从另一个分支重新建立基础,然后在 merge 另一个分支后 merge 到master