有两个具有自己历史的独立存储库:A和B。在某个时候,决定将B的所有内容放入A。这是通过简单地复制文件来完成的,即。A对此操作有一个提交。此外,存储库A特别开发了那些先前在B中更改的部分。
现在人们意识到将整个东西合并到一个存储库中是不值得的,需要单独开发。
第一个想法:只需将B中应该在A中的所有部分(文件)移动。因此,一个单一的提交将再次出现,你可以继续生活。但我还是想将这些文件的更改历史转移到B存储库。
在这方面,问题是:是否有任何机制允许您在不相关的存储库之间传输提交?不提供手动复制具有相应描述的每个单独状态的选项:) 我想有条件地设置来自A的一系列提交并将它们应用于B。
首先,您需要一个包含两个远程存储库的工作副本。获取此类副本的示例:
首先,您需要突出显示 A 中实际上应该在 B 中的文件的更改。这是通过 command 完成的
git filter-branch
,确切的命令将取决于您将如何分隔不同存储库的文件。很可能会是这样的:现在生成的分支仍然要基于 B 并推送:
没查,可能有错别字。
原则上,这可以通过两个命令的组合来安排。使用命令获取所有提交的列表。然后使用命令应用它们。
git rev-list
git cherry-pick
<commit_hash_1>
并<commit_hash_2>
应替换为定义范围的开始和结束提交的哈希值。我们要求 Git 以相反的顺序列出它们,从旧到新。(rev-list 只是将它们打印到标准)。这一切都是为了git cherry-pick
正确使用它们。指定的命令必须在目标存储库 (B) 中运行。假设您之前已与源存储库 (A) 同步。例如,像这样: