一、git reset(修改历史,存在风险)
-
已修改 未暂存
使用以下任意命令:
git checkout .
git checkout -- <file>
git reset --hard
-
已暂存 未提交
使用以下任意命令:
git reset --hard
git reset //把已暂存变成未暂存 git checkout .
git reset HEAD //把已暂存变成未暂存 git checkout .
git reset HEAD <file> //把已暂存变成未暂存 git checkout -- <file>
-
已提交 未推送
-
使用远程仓库覆盖本地仓库
git reset --hard origin/master
-
没有远程仓库也可以
HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^(HEAD~2)表示上上一个版本
git reset --hard HEAD^
-
只想撤销提交,保留修改
修改的文件保留在暂存区中
git reset --soft HEAD^
-
-
已推送
回滚本地仓库,强制推送覆盖远程仓库
git reset --hard HEAD^ git push -f
-
特殊情况
丢弃某个节点(提交)后的全部提交
git reset --hard <commit id>
二、git revert
2.1、revert 常规 commit
git revert <commit id>
revert只是逻辑上对提交的内容进行删除,实际上是对提交的内容进行反向修改产生了新的提交,所以相对reset命令更安全。
2.2、revert merge commit
git revert -m 1 <commit id>