以提问中修改了两个文件a、b为例,假设需要撤销文件a的修改,则修改后的两个文件:
1、如果没有被git add到索引区
git checkout a 便可撤销对文件a的修改
2、如果被git add到索引区,但没有做git commit提交
1)使用git reset将a从索引区移除(但会保留在工作区)
git reset HEAD a
2)撤销工作区中文件a的修改
git checkout a
3、如果已被提交,则需要先回退当前提交到工作区,然后撤销文件a的修改
1)回退当前提交到工作区
git reset HEAD^
2)撤销工作区中文件a的修改
git checkout a
补充:
撤销修改
- 已修改,未暂存:git checkout . (git checkout <file>)
- 已暂存,未提交: git reset (git reset --hard 会覆盖)
- 已提交,未推送: git reset --hard origin/master (远程仓库覆盖本地仓库)
- 已推送: git reset --hard <commitID> (如果要覆盖远程必须强制推 git push -f)