Git reset命令的使用

96
weiweilong
0.2 2017.03.29 16:21* 字数 673

Git reset 命令有三个主要选项:git reset --soft; git reset --mixed; git reset --hard;

git reset --soft

将HEAD引用指向给定提交。索引和工作目录的内容是不变的,在三个命令中对现有版本库状态改动最小。

git reset --mixed(git reset默认的模式)

HEAD引用指向给定提交,并且索引内容也跟着改变,工作目录内容不变。这个命令会将索引变成你刚刚暂存该提交全部变化是的状态,会显示工作目录中有什么修改。

git reset --hard

HEAD引用指向给定提交,索引内容和工作目录内容都会变给定提交时的状态。也就是在给定提交后所修改的内容都会丢失(新文件会被删除,不在工作目录中的文件恢复,未清除回收站的前提)。

用表格看起来会更清楚些:


操作一下看一下实际效果:

首先在一个版本库中修改追踪文件,然后提交,description叫做 add button

使用git log 查看历史提交

copy记录add button 的前一次提交 add label 的哈希ID “7c5a658fbceb904ad877c4254d183e68aed1ddd0”,作为我们reset的给定提交。

git stauts 查看一下当前版本库中文件状态

显示nothing to commit ,在add button 提交后未对版本库中文件做修改

执行git reset --soft 7c5a658fbceb904ad877c4254d183e68aed1ddd0 命令,然后使用git status 查看文件状态。

然后再使用git log 查看历史提交记录。

会发现add button 已经没有了,版本库已经回滚到add label提交的状态了,但是在我们add button 提交修改的文件 里面修改的内容没有丢失,只是回到了未提交的状态。

将文件再次提交,同样取名add button ,继续git reset --mixed 操作。

同样是回滚到了add button 之前的add label 提交。被修改的文件内容也没有丢失,但是修改的文件为红色了(未执行add 操作)。

将文件再次提交,同样取名add button ,继续进行git reset --hard 操作。

执行完git reset --hard 命令后,使用git status 查看文件状态,回滚到add label 提交,add button被修改的文件内容已经没有了,丢失了。版本库中的文件已经完全回到刚提交完add label时的状态。

git reset 根据需要使用不同的命令,使用 --hard时一定考虑回滚后文件的丢失!

Git