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

Git撤回提交中新增文件变更 保留本地工作区文件

误提交新增文件的原因及解决方法

一、误提交的原因

这些新增文件之所以被包含进提交,核心原因是它们被加入了Git暂存区,随后跟着其他正常变更一起完成了提交,常见场景包括:

  • 执行了git add .、git add *这类批量添加命令,把当前目录下所有未被.gitignore规则排除的新增文件都纳入了暂存区;
  • 手动执行git add操作时,误选了这些文件(比如命令行中多选了路径,或者IDE的Git面板里没取消勾选);
  • 使用IDE的自动提交/同步功能时,默认勾选了所有未跟踪文件,未做检查就完成了提交。

从你提供的git show输出也能验证:误提交的文件标记了new file mode,说明Git是把它们作为新跟踪文件纳入提交的,本质就是这些文件被提前add到了暂存区。

二、满足你需求的解决步骤

因为这是最新提交且没有后续提交,按以下步骤操作可同时实现三个目标:

  1. 回退最新提交,保留本地工作区文件
    执行命令:

    git reset HEAD~1 --soft
    

    这个命令会把HEAD指针回退到上一个正确的提交,同时保留工作区所有文件(包括那两个误提交的新增文件),暂存区也会恢复到上一次提交的状态。

  2. 取消对误提交文件的Git跟踪(保留本地文件)
    针对每个误提交的文件,执行:

    git rm --cached mysite/apps/payment/migrations/0011_auto_20221006_1850.py
    

    注意必须加--cached参数,这样只会从Git的跟踪列表中移除文件,不会删除本地的原始内容。

  3. 重新提交正确的变更
    执行命令复用之前的提交信息(避免重新编写):

    git commit -c ORIG_HEAD
    

    此时提交的内容就只有原本需要的文件变更了。

  4. 强制推送到远程仓库
    因为修改了已推送的提交历史,需要强制推送覆盖远程分支:

    git push -f
    

    (注意:如果有其他开发者正在使用这个分支,务必提前告知,避免他们的本地代码冲突)

  5. 生产服务器同步修正后的代码
    在生产服务器上执行强制拉取命令,同步远程的正确状态:

    git pull --force
    

    这会移除生产服务器上之前拉取到的那两个误提交文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:01:06