考虑以下场景:
我在自己的 Git 存储库中开发了一个小型实验项目 A。它现在已经成熟,我希望 A 成为更大的项目 B 的一部分,它有自己的大存储库。我现在想将 A 添加为 B 的子目录。
如何在不丢失任何历史记录的情况下将 A 合并到 B 中?
如果你想合并project-a到project-b:
project-a
project-b
cd path/to/project-b git remote add project-a /path/to/project-a git fetch project-a --tags git merge --allow-unrelated-histories project-a/master # or whichever branch you want to merge git remote remove project-a
这种方法对我来说效果很好,它更短,在我看来更干净。
如果您想放入project-a子目录,您可以使用git-filter-repo(filter-branch不鼓励)。在上述命令之前运行以下命令:
git-filter-repo
filter-branch
cd path/to/project-a git filter-repo --to-subdirectory-filter project-a
合并 2 个大存储库的示例,将其中一个放入子目录:https ://gist.github.com/x-yuri/9890ab1079cf4357d6f269d073fd9731
注意:该--allow-unrelated-histories参数仅在 git >= 2.9 后才存在。请参阅Git - git merge 文档/–allow-unrelated-histories
--allow-unrelated-histories