Git中是否可以撤销已推送的commit及对应已提交文件?
已推送commit移除误提交文件操作方案
该操作可以实现,具体操作根据误提交文件所在的commit位置选择对应方案即可:
注意:若当前仓库为多人协作仓库,修改已推送的提交会改变提交历史,操作前请先和团队成员同步,避免影响他人的本地开发进度
情况1:误提交文件在最近一次已推送的commit中
- 第一步:将目标文件从Git追踪中移除,若需要保留本地文件执行:
git rm --cached <要移除的文件路径>;若不需要保留本地文件直接执行:git rm <要移除的文件路径> - 第二步:修正上一次提交:
git commit --amend --no-edit,如果需要修改commit信息可以去掉--no-edit参数,进入编辑页修改后保存即可 - 第三步:强制推送修改后的提交到远程仓库:
git push origin <对应分支名> --force-with-lease,该命令会先校验远程分支是否有其他人新提交的内容,避免直接覆盖他人的提交记录,比普通--force更安全
情况2:误提交文件在更早的历史commit中,需要清理整个提交历史
- 第一步:使用Git官方推荐的
git-filter-repo工具执行历史清理,命令如下:git filter-repo --invert-paths --path <要移除的文件/文件夹路径> - 第二步:清理完成后将修改后的全部分支历史强制推送到远程:
git push origin --all --force-with-lease
操作完成后,所有协作者需要重新拉取修改后的分支,禁止基于旧的提交历史继续开发后合并,避免被删除的文件重新回到仓库中。如果被移除的文件包含密码、密钥等敏感信息,建议第一时间将对应敏感凭证做失效处理,防止已经有人拉取过旧提交获取到敏感内容。
内容的提问来源于stack exchange,提问作者Reema
相关产品推荐
相关产品推荐

