咱们知道Git有三大区(工做区、暂存区、版本库)以及几个状态(untracked、unstaged、uncommited)git
git reset命令是git中重置命令,即用来撤销某次提交(commit)。首先,咱们得了解,git reset能够帮咱们重置哪些内容:指针
一、修改本地仓库中commit对象(快照)日志
以下图:对象
此时本地仓库对应的是commit4,git reset 可让本地仓库对应的指针变为commit3或是commit1等以前的版本,固然,也能够变为commit4以后的某个commit,如commit5。
Git 的分支,其实本质上仅仅是指向提交对象的可变指针。
备注:当使用git reset命令时候,通常会修改本地仓库。blog
其经常使用格式以下:it
参数说明 (git log和git reflog可查看commitId,commitId是快照的惟一标识)im
--hard commitId 修改本地仓库、暂存区、工做区里面的数据为commitId对应快照的内数据d3
--mixed commitId 修改本地仓库、暂存区里面的数据为commitId对应快照里的数据,是git reset默认的参数,--mixed可缺省。 暂存区的数据会被快照中的数据覆盖数据
这种状况是工做区没有,但暂存区有,因此提示修改未在暂存区(D表示delete)db
--soft commitId 修改本地仓库里面的数据为commitId对应快照的数据。(仅改变指向快照的指针指向)
参数说明
咱们须要注意,使用git reset重置通常是很危险的,会完全地丢掉历史。由于若是没有记录下重置前的commitId,通常不容易找回,除非分析.git/logs里面的日志,故重置需慎重。
git diff只对已被追踪的文件起做用,即已git add过,在暂存区有的
git commit -a -m只对已被追踪的文件起做用,