reset允许塑造仓库历史,如撤销一些修改,或把提交弄的不一样;
1 三种模式
1.1 soft模式
选取一条或多条提交,将它们全部改变放回到暂存区,在此基础上继续创建新的提交;
把几条提交当作一个commit,压缩近暂存区;
$ git reset --soft HEAD~5
$ git status
$ git commit
1.2 mixed模式(默认,推荐)
修改历史和工作目录;
$ git status
$ git reset HEAD
# 把修改从暂存区移除,将它们放回工作目录中
1.3 hard模式
破坏性,擦除掉不想保存的修改;
$ git reset --hard HEAD~3
# 去除最近三次提交
$ git reset --hard 91as31d
# 切换到commit id等于91as31d的提交
2 checkout和reset区别
checkout更关注在一个目录或文件级别的精度上,不用撤销或改变一条提交,可回到一个特定文件的某次提交的历史上,再把该文件和版本拉回到当前的工作目录;
reset针对仓库的整个历史;
$ git checkout c638ec7 oldfile.md