git reset 3种方式

git reset命令有3种方式:

1、git reset --mixed:

此为默认方式,等同于不带任何参数的git reset。

2、git reset --soft:

回退到某个版本,只回退了commit的信息,如果还要提交,直接commit即可(修改的内容变成未add的状态),索引(暂存区)和工作目录的内容是不变的,在三个命令中对现有版本库状态改动最小。

3、git reset --hard:

彻底回退到某个版本,本地的源码也会变为上一个版本的内容,所有修改的内容都会丢失, (修改的代码 不会变成未add的状态)。索引(暂存区)内容和工作目录内容都会变给定提交时的状态。

 

 

git reset产生影响

表现

选项

HEAD

索引(暂存区)

工作目录

原有文件内容的变更

目录结构的变更(增加或者删除文件)

--soft

修改内容还在,变成未add的状态

新增文件:还存在,变成未add的状态(目录结构中文件变成绿色,可以再次执行git commit );

删除文件:目录结构中还是没有,可以直接执行git commit

--mixed

修改内容还在,变成未add的状态

新增文件: 还存在,变成未add的状态(目录结构中文件变成红色,需要执行命令git add . 再执行git commit )

删除文件:目录结构中还是没有,可以直接执行git commit

--hard

修改内容丢失,修改的代码 不会变成未add的状态

新增文件丢失、删除的文件相当于没删

 

 

如何理解HEAD、索引(暂存区)、工作目录:

Git是什么 : Git是目前世界上最先进的分布式版本控制系统, 工作区中有一个隐藏目录.git时,为Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

工作区(Working Directory):电脑里能看到的目录

 

以项目为例说明:

 

git reset 3种方式

 

使用情况:

 

1、提交远程仓库时,多次commit都push错了分支,本来该提交到dev, 结果提交到了master, 在想将代码提交到dev时,说同一个commit不能提交到不同的分支

解决方式:版本回退但得保留所有的修改内容,使用git reset --soft