如何将main分支中的文件移动到其他分支且不重写main分支历史?
Git文件迁移操作方案
操作失败原因
你切出feature分支时,feature和main指向同一提交,feature无任何独有提交。执行rebase时Git判定feature无需要移植的提交,直接将feature指针移动到最新的main提交上,因此继承了main分支删除文件的结果,导致文件丢失。
最简单的修复方案
无需调整之前的操作,按以下步骤执行即可:
- 切换到feature分支:
git switch feature - 从删除文件前的父提交中恢复目标文件:
git checkout HEAD~1 -- 替换为你的目标文件路径- 如果main分支在删除文件后还有其他新提交,将
HEAD~1替换为你切出feature分支时的提交哈希值即可
- 如果main分支在删除文件后还有其他新提交,将
- 提交恢复的文件:
git add 目标文件路径 && git commit -m "新增未完成功能文件"
操作完成后main分支会保留删除文件的提交记录,feature分支正常持有该文件,后续合并feature到main时走正常的合并流程即可。
可选:提前避免该问题的操作流程
如果后续遇到同类需求,可按以下流程操作,不用额外恢复文件:
- 从main切出feature分支:
git switch -c feature - 在feature分支对目标文件做一次提交(哪怕是加一行注释的修改即可)
- 切回main分支删除文件并提交:
git switch main && rm 目标文件 && git commit -a -m "移除未完成功能文件" - 此时执行rebase操作会触发文件冲突,选择保留feature分支的文件版本即可,不会出现文件丢失问题
内容的提问来源于stack exchange,提问作者mdcq
相关产品推荐
相关产品推荐

