如何在Git中撤销已推送的单个文件修改且不删除原文件
Git 操作解决方案
以下操作可以在不删除本地fileC.py自定义修改的前提下,仅将提交记录中该文件恢复为master分支版本,实现PR仅包含fileA.py、fileB.py改动的需求:
方法一:保留提交历史,操作最安全
适合不介意分支多一条恢复提交记录的场景,出错概率最低:
- 第一步:先暂存本地
fileC.py的修改,避免被覆盖git stash push -m "暂存fileC本地改动" -- fileC.py - 第二步:拉取master分支的原版
fileC.py覆盖当前分支的提交版本git checkout origin/master -- fileC.py - 第三步:提交这次文件恢复改动
git commit -m "还原fileC为master版本,不纳入PR" - 第四步:恢复之前暂存的本地修改,此时你本地的
fileC.py还是你修改后的内容,不会丢失git stash pop - 第五步:推送新提交到远程分支,PR会自动更新,仅展示
fileA.py和fileB.py的改动git push
方法二:修改原有提交,无额外提交记录
如果你不想分支上出现专门的恢复提交,可选择该方案,仅适用于三个文件的改动是最近一次提交的场景:
- 先执行方法一的第一步、第二步,完成本地改动暂存和原版文件拉取
- 提交时追加到上一次提交,不生成新的提交记录
git commit --amend --no-edit - 执行方法一的第四步恢复本地
fileC.py修改 - 强制推送更新远程分支,注意仅可在你个人使用的功能分支执行该操作,不要操作公共分支
git push --force-with-lease
两种方案都只会修改分支提交记录中的
fileC.py内容,完全不会影响你本地工作区的该文件修改,也不会删除文件。
内容的提问来源于stack exchange,提问作者Tonysres
相关产品推荐
相关产品推荐

