reset是Git中常用命令之一,主要是用来撤销暂存区或者回退版本。reset不会改变HEAD的指向,之前指向master,操作完依然指向master。reset改变的是HEAD所指向的游标。这个要和checkout区分开来,checkout主要用来改变HEAD本身,例如切换分支等。
git reset [-q] [<tree-ish>] [--] <paths>...
参数
<tree-ish>
如果不提供的话默认是HEAD所指向的提交(就是当前分支的最后一个commit),也可以通过id指定某个提交。
<paths>
指的是文件路径。
--
用来分隔commit名和文件路径的,防止提交名和路径名冲突。
用法
这条命令执行的效果是用<tree_ish>
来覆盖暂存区,相当于git add
的反操作。
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
参数
--soft
只改变版本库,工作区和暂存区不动
--mixed
改变版本库和暂存区
--hard
改变版本库,暂存区,工作区
--merge
略,暂时没接触到
--keep
略,暂时没接触到
这个命令的执行效果是把分支回退到指定的commit上。至于暂存区和工作区是否变化,取决于给的参数。
第一种和第二种方法最大区别在于是否提供<paths>
,<paths>
指的是文件路径。
从功能上看,第一种只改变暂存区,第二种是一定会改变分支指针的指向(俗称回退)。
网友评论