reset
将当前的 HEAD 重置到指定状态
实例
重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
- git reset [file]
重置暂存区与工作区,与上一次commit保持一致
- git reset --hard
重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
- git reset [commit]
重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
- git reset --hard [commit]
重置当前HEAD为指定commit,但保持暂存区和工作区不变
- git reset --keep [commit]
将本地的状态回退到和远程的一样
- git reset --hard origin/master
撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
- git reset --hard HEAD
HEAD 说明
HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD^2 上上一个版本
HEAD^3 上上上一个版本
选项
- --soft
-
完全不触摸索引文件或工作树(而是将头重置为
<commit>
,就像所有模式一样)。就像git status
那样,这会将所有更改的文件保留为“要提交的更改” 。 - --mixed
-
重置索引,但不重置工作树(即保留修改后的文件,但不标记为提交),并报告未更新的内容。这是默认操作。
-
如果指定了
-N
,则将删除的路径标记为要添加的意图 - --hard
-
重置索引和工作树。自
<commit>
以来对工作树中跟踪文件的任何更改都将被丢弃。以写入任何跟踪文件的方式任何未跟踪的文件或目录都将被简单地删除。 - --merge
-
重置索引并更新工作树中
<commit>
和 HEAD 之间不同的文件,但保留那些索引和工作树中不同的文件(即,尚未添加的更改)。如果<commit>
和索引之间的另一个文件具有未暂存的更改,则重置将中止。 -
换句话说,
--merge
类似于git read-tree -u -m <commit>
,但是会携带未合并的索引条目。 - --keep
-
重置索引条目并更新工作树中
<commit>
和 HEAD 之间不同的文件。如果<commit>
和 HEAD 之间不同的文件具有本地更改,则重置将中止。 - --[no-]recurse-submodules
-
当更新工作树时,使用
--recurse-submodules
也会根据超级项目中记录的提交,递归地重置所有活动子模块的工作树,同时设置子模块的head在该提交时被分离。