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

如何重置Git分支Destination为Source状态但保留指定文件提交历史?

解决Git分支重置到Source状态但保留指定文件完整提交历史的方案

现有Git分支Destination(特性分支)和Source,二者文件内容完全一致但提交历史不同。需要将Destination分支所有文件重置为Source的状态并同步提交历史,但要保留Destination分支中file.ps1文件的完整提交历史(不是仅保留最新版本)。
补充背景:此前从Source创建特性分支后直接合并回Source再部署测试,导致后续特性分支可能引入错误代码。正确流程应为先部署特性分支测试,有问题回滚到Source,验证无误后再合并。当前特性分支除目标文件外还修改了其他文件,需将所有特性分支恢复到Source工作状态,同时保留目标文件的完整提交历史。

操作步骤(单分支处理)

  • 先备份目标分支,避免操作失误:

    git branch backup/Destination
    
  • 切换到需要处理的Destination分支:

    git checkout Destination
    
  • 提取该分支中所有修改file.ps1的提交记录,复制这些提交的哈希值(按提交时间从早到晚排序):

    git log --oneline -- file.ps1
    

    执行后会输出类似内容:

    a1b2c3d Update file.ps1 with new logic
    d4e5f6g Fix bug in file.ps1
    g7h8i9j Initial modification to file.ps1
    

    把这些哈希值(比如g7h8i9j, d4e5f6g, a1b2c3d)按从最早到最新的顺序记录下来。

  • 将当前分支硬重置到Source分支的状态:

    git reset --hard Source
    

    这一步会把Destination分支的所有文件和提交历史完全同步到Source,file.ps1也会变回Source中的版本。

  • 把之前提取的file.ps1相关提交重新应用到当前分支:

    git cherry-pick g7h8i9j d4e5f6g a1b2c3d
    

    注意提交顺序必须是从最早到最新,这样才能完整保留原有提交历史。

冲突处理

如果cherry-pick过程中出现冲突:

  1. 打开冲突的file.ps1文件,手动解决代码冲突
  2. 标记冲突已解决:
    git add file.ps1
    
  3. 继续执行cherry-pick:
    git cherry-pick --continue
    

如果需要跳过某个冲突提交,执行:

git cherry-pick --skip

如果要放弃整个cherry-pick操作,回到重置后的状态:

git cherry-pick --abort

多特性分支批量处理

如果有多个类似的特性分支需要处理,对每个分支重复上述步骤即可。如果分支数量较多,可以编写简单的Shell脚本自动提取提交哈希并执行操作,但需注意提前备份所有分支。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:22:07