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

如何合并两个Git历史提交并强制推送?移除提交敏感信息

清理Git提交历史中的敏感信息并合并提交

可以实现。你需要用交互式变基重新构建提交历史,既能把B和C合并为提交F,又能保留后续的D、E提交。具体步骤如下:

  1. 确保当前处于develop分支(题目已说明本地分支干净且与远程一致,可直接操作):

    git checkout develop
    
  2. 启动交互式变基,目标是从提交A之后的提交开始修改(A是B的父提交,你可以用A的哈希值,或者用相对引用HEAD~4,因为从E往前数4个提交就是A):

    git rebase -i <A的哈希值>
    # 或者用相对引用:git rebase -i HEAD~4
    
  3. 在弹出的文本编辑器中,会显示按从旧到新排列的提交列表:

    pick xxxxxxx B的提交信息
    pick yyyyyyy C的提交信息(清除敏感信息的提交)
    pick zzzzzzz D的提交信息
    pick aaaaaaa E的提交信息
    

    将C对应的那行的pick改成squash(或缩写s),修改后如下:

    pick xxxxxxx B的提交信息
    squash yyyyyyy C的提交信息(清除敏感信息的提交)
    pick zzzzzzz D的提交信息
    pick aaaaaaa E的提交信息
    

    要是不想编辑合并后的提交信息,也可以改成fixup(或缩写f),Git会直接保留B的提交信息,最终提交F的内容是C的状态(已清除敏感信息)。

  4. 保存并关闭编辑器,Git会自动将B和C合并为一个新提交,然后把D、E提交重新应用到这个新提交之后。此时本地develop的历史就变成了A - F - D - E。

  5. 最后强制推送到远程仓库(题目允许强制推送):

    git push -f origin develop
    

注意事项

  • 强制推送后,其他协作者需要更新本地的develop分支,建议他们执行:
    git fetch origin
    git reset --hard origin/develop
    
    避免本地旧历史与远程新历史冲突。
  • 你之前用git reset --soft <B的哈希>的方法不可行,因为这个操作会把HEAD移到B,后续的C、D、E会变成游离提交,导致历史丢失;而交互式变基是重新构建提交链,能保留后续的D、E提交。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:12:35