将两个或多个git分支拆分为一个repo的独立子目录?

时间:2010-07-01 19:46:48

标签: git

这个问题与How to combine two branches from two different repositories in a single repository?有些相似。

但是,我想将相同存储库中的两个分支组合到一个分支中,但是在单独的子目录中。所以,从一个有两个分支的仓库开始:

/appFoo
  -MasterBranch
  -OtherVersionBranch

结束了一个分支(主)和两个子目录的回购:

/appFoo
    /MasterSubdirectory
    /OtherVersionSubdirectory

当然,我想保持历史记录不变,所以如果我在 OtherVersionSubdirectory 中查看文件的日志,我会看到对该分支进行的所有提交。

基本上,作为开发分支开始的是另一个客户的自定义版本,因此我们不认为将其视为主分支是有意义的。

谢谢大家!

1 个答案:

答案 0 :(得分:3)

切换到分支MasterBranch并将分支的内容抛出到目录MasterSubdirectory,提交:

git checkout MasterBranch
mkdir MasterSubdirectory
git mv -k * MasterSubdirectory
git commit -a

这使您的分支只有一个目录。

在OtherVersionBranch中做类似的事情:

git checkout OtherVersionBranch
mkdir OtherVersionSubdirectory
git mv -k * OtherVersionSubdirectory
git commit -a

将一个分支合并到另一个分支

git checkout MasterBranch
git merge OtherVersionBranch
git branch -d OtherVersionBranch

现在你有一个分支MasterBranch。您可以将其与master合并,也可以随意做任何事情。

或者,如果您不介意重写历史记录,则可能需要使用rebase替换merge。这将产生一个更清晰的提交顺序 - 第一个分支,后一个分支。

并在副本上试试这个。它对我有用,但我的情况很简单。