如何将 Git 分支移到其自己的存储库中?

Posted

技术标签:

【中文标题】如何将 Git 分支移到其自己的存储库中?【英文标题】:How do I move a Git branch out into its own repository? 【发布时间】:2011-01-14 16:27:04 【问题描述】:

我有一个分支,我想将它移到一个单独的 Git 存储库中,并在此过程中最好保留该分支的历史记录。到目前为止我一直在看git filter-branch,但我无法确定它是否可以做我想做的事情。

如何将 Git 分支提取到自己的存储库中?

【问题讨论】:

【参考方案1】:

您可以简单地将分支推送到新存储库。它的所有历史都会随之而来。然后您可以选择是否从原始存储库中删除分支。

例如

git push url://to/new/repository.git branch-to-move:new-branch-name

对于新存储库,new-branch-name 通常是 master。

可以使用git init 创建一个新的空存储库。

【讨论】:

以防万一有人想知道,我将 URL 替换为 Git 存储库目录的路径,效果很好。 也可以在新仓库中命名分支名称:git push url://to/new/repository.git branch-to-move:new-branch-name Yves 上面的评论是正确的,否则你将没有主人,克隆过程将结束warning: remote HEAD refers to nonexistent ref, unable to checkout.。如果已经在那个阶段,只需使用git checkout -b branch-to-move 并且您是安全的,或者您只需使用git checkout -b master 即可拥有您的主分支:) 请注意,这不仅会复制分支及其历史记录,还会将所有历史记录复制回存储库的开头,包括沿指定分支分支的分支的历史记录 如果这个答案也让你感到困惑,这是我如何理解它以使其工作:1)在你的终端中,位于包含你想要的 repo 和分支的目录中做一个新的回购; 2)url 应该是一个 git url,比如 git@github.com:brianzelip/groceries.git; 3) branch-to-move 是您要创建新仓库的当前仓库的分支; 4)new-branch-name 是您希望在正在创建的新仓库中的新分支的名称,即:master【参考方案2】:

这将保留所有分支的历史记录,但让您的副本特别指向一个分支:

git clone -b newbranch CurrentRepo NewRepo

这不会“移动”任何东西,只是制作一个副本。

【讨论】:

值得注意的是clone -b 是新的。它需要 git >= 1.6.5(2009 年 10 月发布)。 我无法让它工作,但那是在我看到查尔斯·贝利的消息之前。

以上是关于如何将 Git 分支移到其自己的存储库中?的主要内容,如果未能解决你的问题,请参考以下文章

在 Git 中导出带有历史记录的子树

将初始提交从 master 移到 Git 中的另一个分支

如何从存储库中获取所有分支?

如何从 git 存储库中删除源

如何将Git存储库转移到另一个主分支

Git删除TFS git存储库中的远程分支