如何在不丢失历史记录的情况下将项目的某些部分移到Git分支中?

古埃塞

我从2006年开始使用CVS进行主要项目,于2008年移至Subversion,于2021年移至Git,但一开始,我还是版本控制的新手,我的存储库混乱不堪,这是我游戏的几种截然不同的实现。

我想将它们移到单独的分支中,但我不想丢失分支之间的历史记录,即,我希望能够在日志中找到一些文件最初位于“ master”分支中,但被移至了“ master”分支中。 “ pre-alpha”分支。我该如何实现?我应该创建一个分支,切换到该分支,删除其中没有任何关系的文件,回到“ master”分支,然后删除新分支中已经存在的文件吗?是为此目的使用Git的正确方法吗?

PS:我是根据Larsks的回答来做的:

git subtree split -b prealpha --prefix trunk
git subtree split -b alpha --prefix alpha
git subtree split -b jme --prefix tuer
git push origin prealpha
git push origin alpha
git push origin jme
git subtree split -b prebeta --prefix pre_beta
git branch -m master oldmaster
git branch -m prebeta master
git push origin oldmaster

仅这最后一行不起作用:

git push origin master

[拒绝] master-> master(非快进)错误:无法将引用推送到“ https://[email protected]/p/tuer/git”

幼虫

看来您的Subversion -->Git迁移可能不是最佳选择。您的master分支包含一堆顶级目录,这些目录看起来可能与Subversion分支相对应。您到Git的迁移应该已经将它们转换为Git分支。

我已经对该项目进行了简要介绍,并且很难辨别各个分支之间的关系。我希望,例如,对的更改pre_beta会在某些时候与alpha代码共享一个共同的历史,但是我找不到明显的匹配项。

我们可以git subtree用来将这些顶级目录拆分为不同的分支。我会做类似的事情:

git subtree split -b alpha --prefix alpha
git subtree split -b pre_beta --prefix pre_beta
git subtree split -b tuer --prefix tuer
git branch -m master old_master
git branch -m pre_beta master

这会将每个目录的历史记录分为一个单独的分支,然后将现有pre_beta分支变成该master分支(因为它似乎具有最新更改)。

这使您:

$ git branch
  alpha
* master
  old_master
  tuer
$ git checkout master
$ ls
branding.properties  lib          NOTICE.txt  src
build.xml            LICENSE.txt  README.txt  versioning.properties
$ git checkout alpha
$ ls
about.txt  changes_2.rtf  contents.txt  lib       md3         sound    tools
bean       com            drawer        main      readme.txt  target
build.xml  connection     gpl.txt       manifest  snd         texture
$ git checkout tuer
$ ls
about.txt  changes_2.rtf  contents.txt  jme   md2         snd      tools
bean       com            drawer        lib   obj         sound
build.xml  connection     gpl.txt       main  readme.txt  texture
$ git checkout old_master
$ ls
alpha  pre_beta  trunk  tuer

您可以在https://github.com/larsks/tuer-git上查看结果

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不丢失 git 历史记录的情况下修复 git 损坏的索引?

如何在不丢失历史记录的情况下将本地git存储库从PC移动到Mac

如何在不增加孤儿的历史记录的情况下,将主分支的更改git合并到孤儿分支?

汞:如何在不丢失历史记录的情况下将文件移动到子文件夹?

如何在不添加历史记录的情况下将Git分支标记为已合并(Git merge -s我们的--squash)

在git存储库中,如何在不丢失Git历史记录的情况下删除旧的已重命名的“大写”文件夹

如何在不获得Git历史记录中的合并提交的情况下合并拉取请求

如何在不执行命令的情况下将命令添加到Bash历史记录中?

如何在不提交更改的情况下从git历史记录中删除文件?

在不丢失历史记录的情况下从托管的 git 服务(Github、Bitbucket)中删除密钥

如何在不破坏文件历史记录的情况下合并多个Git存储库?

如何在不更改远程文件的情况下更新远程git repo历史记录

如何在不添加历史记录的情况下运行shell命令?

如何在不更改浏览器历史记录的情况下更改url

如何在不执行的情况下按编号从历史记录中调用命令?

Git:在不丢失历史记录的情况下将子文件夹从存储库获取到新文件夹

TFS:在不丢失版本历史记录的情况下拆分大型源代码文件

如何在不影响主服务器的情况下删除我的本地分支历史记录

从 git 分支的历史记录中删除某些提交

在什么情况下您输入的命令会从历史记录中丢失?

如何在不执行命令的情况下向bash历史记录添加命令?

如何在 git repo 中缩进我的代码并在没有历史记录的情况下提交和合并?

如何在不使用CDC功能的情况下维护单个表中多个表的历史记录

如何在不使用命令行的情况下从GitHub历史记录中删除文件

如何在不打开窗口的情况下添加到Vim搜索历史记录中?

如何在未登录浏览器历史记录的情况下转到路线

如何在不以编程方式执行命令的情况下将命令保存在bash历史记录中?

从CVS迁移到Git,而不会丢失历史记录

如何在不下载所有历史记录的完整源代码的情况下检出并构建特定的铬标签/分支?