使用git rebase -i编辑提交时如何仅撤销单个文件的修改
撤销历史提交中单个文件改动的操作方案
方案1:反向补丁直接修改(更简便)
你当前处于rebase edit模式,且目标提交已完成应用、工作区干净,可直接用该方案:
- 对目标文件应用当前提交的反向改动,撤销该文件在本次提交的所有修改:
git show HEAD -- [要撤销改动的文件名] | git apply -R - 将改动合并到当前提交,无需修改原有提交信息:
git commit -a --amend --no-edit - 完成剩余rebase流程即可:
git rebase --continue
方案2:重置暂存区后调整
如果需要更直观的看到所有改动再提交,可以使用该方案:
- 将当前提交的所有改动回退到暂存区,不修改工作区内容:
git reset HEAD^ --soft - 恢复目标文件到本次提交前的状态,同步更新暂存区和工作区:
git restore --source=HEAD --staged --worktree [要撤销改动的文件名] - 重新提交改动,直接复用原提交的提交信息:
git commit -C ORIG_HEAD
如果需要调整提交信息,可将大写-C改为小写-c进入编辑模式。 - 完成剩余rebase流程:
git rebase --continue
注意事项
操作前可先创建临时标签备份当前分支状态,避免误操作丢失内容:git tag backup_before_rebase
操作完成确认无误后可以删除该标签:git tag -d backup_before_rebase
内容的提问来源于stack exchange,提问作者Lorenz Meyer
相关产品推荐
相关产品推荐

