将具有历史记录的 Git 分支移动到新的 repo
Moving Git branch with history to new repo
我有一个 Git 存储库,在不同的分支上有多个项目
- 大师*
- 前端
- 后端
- api
我想将它们分解成不同的独立存储库。我已经为每个创建了新的存储库。我想让每个分支及其所有提交历史移动到他们新的个人存储库。
如果每个分支只包含相应的代码,那么这很简单。使用 git clone --single-branch --branch <original-repo-url>
创建新存储库实际上更简单,但如果您已经 init
ed 并且只想引入历史记录,则可以执行类似
的操作
git fetch <original-repo-url> +frontend:master
如果你没有在新的回购中创建第一个分支,你会得到奇怪的行为 - 所以在这种情况下,你首先只创建一些虚拟提交,然后从分支分离,这样更新就会进行通过.
git commit --allow-empty -m temp
git checkout --detach
git fetch <original-repo-url> +frontend:master
git checkout master
另一方面,如果您的每个分支都包含所有代码,并且您想重写每个 "new" 存储库的历史记录以仅包含相关代码,那么您可能想使用 git filter-branch
。它有很多选项,所以如果没有更具体的细节,我不能确切地说出你会使用哪些选项,但子目录过滤器可能会引起你的兴趣。
我有一个 Git 存储库,在不同的分支上有多个项目
- 大师*
- 前端
- 后端
- api
我想将它们分解成不同的独立存储库。我已经为每个创建了新的存储库。我想让每个分支及其所有提交历史移动到他们新的个人存储库。
如果每个分支只包含相应的代码,那么这很简单。使用 git clone --single-branch --branch <original-repo-url>
创建新存储库实际上更简单,但如果您已经 init
ed 并且只想引入历史记录,则可以执行类似
git fetch <original-repo-url> +frontend:master
如果你没有在新的回购中创建第一个分支,你会得到奇怪的行为 - 所以在这种情况下,你首先只创建一些虚拟提交,然后从分支分离,这样更新就会进行通过.
git commit --allow-empty -m temp
git checkout --detach
git fetch <original-repo-url> +frontend:master
git checkout master
另一方面,如果您的每个分支都包含所有代码,并且您想重写每个 "new" 存储库的历史记录以仅包含相关代码,那么您可能想使用 git filter-branch
。它有很多选项,所以如果没有更具体的细节,我不能确切地说出你会使用哪些选项,但子目录过滤器可能会引起你的兴趣。