git - 将分支移动到不同的存储库,同时保留其提交但聚合剩余的历史记录

标签 git copy repository branch git-remote

我有两个存储库 A 和 B,其中包含不同的项目。在某个时候,我在存储库 B 中创建了一个分支“开发”,并在那里做了一些工作。

Repo A master  a-a-a-a

Repo B master  b-b-b-b
                      \
       develop         d-d-d-d-d

我现在想做的是将分支开发从存储库 B 移动到 A,而其所有提交都应保留,但存储库 B 的其余历史记录应 merge 。所以最后应该是这样的

Repo A master  a-a-a-a
                      \
       develop         d-d-d-d-d

Repo B master  b-b-b-b
                     \
       develop         d-d-d-d-d

而如果我比较两个开发分支,它们应该是相似的。 我已经实现了将分支移动

- [Repo B] git remote add /url/to/RepoA
- [Repo B] git push RepoA develop

然而,这也包括了 Repo B (b-b-b-b) 的整个历史,这是我不想要的(或者实际上 merge 到一个提交中)。

关于如何做到这一点有什么建议吗?

谢谢

最佳答案

完成后:

[Repo B] git push RepoA develop

我想你会得到类似的东西:

Repo A master  a-a-a-a

repoB/master     b-b-b-b
                        \
         develop         d-d-d-d-d

即两个分支 repoA/masterrepoB/master 位于您的存储库中,但未连接。

你为什么不执行 rebase
使用 -i 选项,以便您可以决定将 b-b-b-b 提交压缩为一次提交(我认为这就是您想要的) 命令是

git rebase -i master develop

然后,您将选择第一个提交 b 并压缩以下提交。
结果应该是:

Repo A master  a-a-a-a
                      \
        develop        b'-d'-d'-d'-d'-d'

其中 b' 是压缩第 4 个提交 b 后的提交 和 d' 是由提交 d 产生的提交。

关于git - 将分支移动到不同的存储库,同时保留其提交但聚合剩余的历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27945697/

相关文章:

git - `git lfs` 使用哪个 git-lfs?

node.js - 使用 git 部署到 digitalocean 上的 dokku

Android - 保护我的应用程序免受外部 GitHub 库的更改/删除?

C 中每个 block 复制一个文件 block

c++ - 如何复制由 vector 组成的数组

eclipse - 如何将已经 checkout 的svn存储库导入Eclipse?

android - 由于 GnuTLS 错误,Repo init 无法成功

windows - 为什么在 Git 配置中忽略任何引号?

git 相当于 `svn export` 或 github 解决方法

将一个结构复制到另一个