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

使用git filter-repo并合并后出现重复提交的解决方法

清理重复提交与敏感文件的实操方案

1. 先做仓库备份,避免翻车

不管后续操作怎么搞,先把当前仓库完整备份,防止操作失误丢数据:

git clone --mirror https://github.com/benvessely/brevets brevets-backup

2. 先搞清楚要留哪些提交

你需要先明确:从4aa07到a3dee之间,哪些提交是不含credentials.ini的(这些是要保留的),哪些是带敏感文件的重复提交(要删掉的)。

用下面的命令快速排查提交内容:

# 查看这段区间所有提交的文件变更
git log --name-status 4aa07..a3dee
# 单独检查某提交是否包含敏感文件
git show <提交哈希>:credentials.ini

3. 两种清理方式选其一

方式一:交互式变基(适合分支结构简单的情况)

如果重复提交的数量不多,用变基直接删掉不需要的提交:

git rebase -i 4aa07^

弹出编辑器后:

  • 找到所有带credentials.ini的提交,把行首的pick改成drop(直接删)
  • 对于内容完全一致的重复提交,只保留不含敏感文件的那个,另一个同样用drop删掉

变基完成后,强制推送到远程(注意:这会改写远程历史,必须提前跟团队成员打个招呼,让他们同步新历史):

git push --force-with-lease origin <你的分支名>

方式二:用git filter-repo彻底清理(适合复杂分支结构)

如果变基搞不定复杂的分支,就用filter-repo再扫一遍,同时干掉重复提交:

  1. 先移除所有涉及credentials.ini的提交:
git filter-repo --invert-paths --path credentials.ini
  1. 接着删掉内容完全重复的提交:
git filter-repo --remove-duplicates

完成后同样强制推送:

git push --force-with-lease origin <你的分支名>

4. 验证清理结果

做完操作后,一定要确认历史干净了:

# 检查有没有敏感文件的残留痕迹
git log --all --grep="credentials.ini"
git log --all --name-status | grep "credentials.ini"
# 看提交图有没有异常分支
git log --graph --oneline

重要提醒

  • 强制推送会改写远程仓库的历史,所有协作的人必须重新拉取新的仓库历史,基于新分支开发,不然会出现大量冲突。
  • 如果远程仓库开了分支保护,得先临时关掉才能执行强制推送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:57:34