You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将GitHub分支中的文件夹切割到同分支下另一文件夹并保留提交历史

将分支内文件夹切割到同分支下另一文件夹并保留历史的方法

你可以用Git底层命令构造提交来实现,思路和你之前切割到新分支的逻辑类似,只是要基于当前分支的HEAD构造新提交,将源文件夹的内容迁移到目标路径,同时保留分支原有内容(或移除源文件夹,实现“切割”)。具体步骤如下:

  1. 克隆仓库并切换到目标分支:
git clone <仓库地址>
git switch 目标分支名
  1. 获取当前分支的树对象、源文件夹的树对象:
current_tree=$(git rev-parse HEAD^{tree})
source_tree=$(git rev-parse HEAD:源文件夹名)
  1. 构造新的树对象:移除当前树里的源文件夹,同时将源文件夹的内容映射到目标路径下:
new_tree=$(git mktree <<EOF
$(git ls-tree -r $current_tree | grep -v "^[^	]*	源文件夹名/")
$(git ls-tree -r $source_tree | sed "s/	/	目标文件夹名\//")
EOF
)
  1. 基于新树对象创建提交,父节点为当前分支的HEAD:
new_commit=$(git commit-tree $new_tree -p HEAD -m "将源文件夹迁移到目标文件夹(保留历史)")
  1. 更新当前分支的引用到新提交:
git update-ref refs/heads/目标分支名 $new_commit
  1. 验证并推送更改:
git status
git push origin 目标分支名

执行完成后,你可以用git log --follow -- 目标文件夹名查看迁移后的历史,会看到源文件夹的原有提交记录被继承过来。

注意:替换命令中的<仓库地址>、目标分支名、源文件夹名、目标文件夹名为实际名称。如果不需要保留源文件夹,上述命令已经通过grep -v移除了源文件夹的内容;如果要保留源文件夹,去掉grep -v "^[^ ]* 源文件夹名/"这部分即可。

内容的提问来源于stack exchange,提问作者tarekahf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:16:10