如何将Git分支b1的f2文件夹含历史迁移为新分支b2并更名
实现步骤
要实现保留f2完整提交历史的目标,不能直接通过文件复制的方式(那样会丢失历史),需要重写新分支的历史来仅保留f2相关的提交,具体操作如下:
1. 从b1创建新分支b2
首先基于b1分支创建并切换到b2分支:
git checkout -b b2 b1
2. 重写b2历史,仅保留f2的提交记录
使用git filter-repo(官方推荐替代旧的git filter-branch的工具)过滤分支历史,只保留涉及f2文件夹的所有提交:
git filter-repo --path f2/
注意:如果你的Git版本没有自带
git filter-repo,需要先安装它(比如通过包管理器:brew install git-filter-repo或sudo apt-get install git-filter-repo)。执行这个命令后,b2分支的历史会被重写,此时分支目录下只会剩下f2文件夹,且完整保留它的所有提交记录。
3. 修改f2内容并更名
在f2文件夹中完成所需修改后,将其重命名为f2_updated:
git mv f2 f2_updated
4. 提交修改
提交重命名和内容修改的操作:
git add . git commit -m "Rename f2 to f2_updated and apply changes"
5. 推送b2分支到远程
将处理好的b2分支推送到远程仓库(第一次推送需要设置上游分支):
git push -u origin b2
为什么你的初步操作无法实现目标
你最初的git checkout <b1> -- <f2>只是将b1分支的f2文件复制到当前工作区,不会携带任何提交历史。如果b2是新建的空分支,这样操作后b2里的f2没有历史记录,不符合需求。
内容的提问来源于stack exchange,提问作者tarekahf
相关产品推荐
相关产品推荐

