如何将最后一次提交中某文件的部分改动移除并应用到工作区
操作指南
前置说明
所有操作仅修改本地提交记录,不会丢失任何代码改动。
步骤1:撤销最近一次提交,保留所有改动到工作区
执行命令:git reset HEAD~
运行后,最近一次提交的所有改动都会从提交记录中移除,全部保留在本地工作区,不会删除任何代码。
步骤2:筛选需要保留的改动重新提交
因为错误提交的改动全部位于同一个文件,你只需要暂存除了这个文件之外的、原本属于最后一次提交的改动即可:
- 暂存要保留的文件:
git add 需要保留的文件1路径 需要保留的文件2路径... - 提交并覆盖之前的错误提交:
git commit --amend
执行完成后,你仓库的最后一次提交就只包含你需要保留的内容,之前错误提交的那个文件的改动仍然完整留在工作区,可以后续正常add、commit创建新的提交。
特殊场景:错误提交的文件里只有部分改动需要移出
如果该文件里有一部分改动属于原本的最后一次提交,另一部分需要移出,执行完步骤1后,使用交互式暂存命令筛选要保留的片段即可:
执行命令:
git add -p 目标文件路径
按照命令行提示选择要保留的片段,不需要保留的内容不选择,完成后执行git commit --amend即可,剩余未暂存的改动就会留在工作区。
已推送到远程的处理
如果错误的提交已经推送到了远程仓库,确认没有其他人基于该分支提交新内容后,执行强制推送覆盖远程分支即可:git push -f origin 对应分支名
内容的提问来源于stack exchange,提问作者Maksym Hazevych
相关产品推荐
相关产品推荐

