Git操作:如何移除318个含敏感密码的历史提交
Git批量移除敏感提交的解决方案
方案一:仅保留最新25个提交(操作最简单)
如果可以接受只保留最新的25个提交,直接基于目标起始提交重建分支即可:
- 先确定要保留的最早提交哈希(比如示例中的
780435e,即删除密码目录的那次提交) - 在本地仓库执行以下命令:
# 创建临时分支,指向要保留的最早提交 git checkout -b new-master 780435e # 将原master分支上该提交之后的所有提交合并到临时分支 git cherry-pick 780435e..master # 切换回原master分支 git checkout master # 强制重置master分支到临时分支的状态 git reset --hard new-master # 强制推送至远程仓库(会覆盖远程历史,操作前确认) git push origin master --force # 删除临时分支 git branch -d new-master
方案二:彻底清除敏感目录并移除指定提交
如果需要保留更多历史但彻底清除passwords目录的所有痕迹,同时移除不需要的提交,推荐用git filter-repo(比旧的git filter-branch更高效,适合大量提交场景):
- 确保已安装
git filter-repo(新版本Git默认包含,若未安装可通过系统包管理器安装) - 执行命令彻底移除
passwords目录及其所有历史记录:git filter-repo --path passwords --invert-paths - 移除不需要的提交:找到需要保留的最早提交哈希,执行重置命令丢弃之前的所有提交:
git reset --hard <需要保留的最早提交哈希> # 强制推送至远程仓库 git push origin master --force
注意事项
- 操作前必须备份本地仓库,防止数据丢失
- 强制推送会覆盖远程仓库的历史,需确保所有协作成员知晓并同步更新本地仓库
- 若远程仓库开启了分支保护,需先关闭保护才能执行强制推送
内容的提问来源于stack exchange,提问作者Sabrina
相关产品推荐
相关产品推荐

