将两个或更多的git分支拆分为一个仓库的单独子目录?
将两个或更多的git分支拆分为一个仓库的单独子目录?
这个问题与如何将两个不同仓库的两个分支合并到一个单一仓库中?有些相似。
然而,我想将同一个仓库中的两个分支合并成一个分支,但是放在不同的子目录下。所以,从一个有两个分支的仓库开始:
/appFoo -Master分支 -OtherVersion分支
最终生成一个有一个主分支和两个子目录的仓库:
/appFoo /Master子目录 /OtherVersion子目录
当然,我希望保持历史记录完整,所以如果我查看OtherVersion子目录中文件的日志,我能看到所有对该分支所做的提交。
基本上,最初作为开发分支的东西发展成为另一个客户的定制版本,所以我们不再觉得将其视为主分支的一个分支是有意义的。
谢谢大家!
问题的原因:在合并两个或多个git分支时,可能会遇到文件重命名的冲突,导致无法成功合并。
解决方法:可以通过将分支的内容分别放入不同的子目录中来解决冲突,并进行提交。具体步骤如下:
1. 切换到主分支(MasterBranch)并将分支的内容放入目录(MasterSubdirectory)中,然后提交:
git checkout MasterBranch mkdir MasterSubdirectory git mv -k * MasterSubdirectory git commit -a
2. 同样的,切换到另一个分支(OtherVersionBranch)并将分支的内容放入目录(OtherVersionSubdirectory)中,然后提交:
git checkout OtherVersionBranch mkdir OtherVersionSubdirectory git mv -k * OtherVersionSubdirectory git commit -a
3. 将一个分支合并到另一个分支中:
git checkout MasterBranch
git merge OtherVersionBranch
git branch -d OtherVersionBranch
现在你只有一个名为MasterBranch的分支,可以将其与master合并,或者进行其他操作。
另外,如果你不介意重写历史记录,你可以使用rebase替换合并操作,这将产生更清晰的提交顺序,先是一个分支,然后是另一个分支。
请注意在操作之前备份你的代码,因为这个方法只适用于简单的情况。
如果在合并过程中出现了许多"CONFLICT (rename/rename)"冲突,可能是因为git在相同的文件上进行了重命名而不是合并操作。你可以尝试在合并时添加参数"--find-copies-harder"来解决冲突。
如果以上方法仍然无法解决冲突,可能需要等待其他人发布更好的解决方案或者手动解决冲突。
最后,原作者表示已经解决了问题,但仍然希望有更简洁的解决方案。