Git reset soft, mixed, hard的区别

By | 2019年4月3日

看到一篇写的非常不错的文章,图文并茂地介绍了git reset三种模式:文章连接

简单总结下,reset 就是撤销从指定commit_id之后的所有提交。区别是:

  • –hard:working tree和cache全部清空。
  • –soft:未提交修改和撤销commit的修改,保留。撤销commit的修改,放在cache区里。
  • –mixed(不加参数):未提交修改和撤销commit的修改,保留。撤销commit的修改,以及为提交cache里的修改,放在working tree里。

总结:–mixed和–soft都能保留修改,但是–soft会将撤销的放在cache里。所以如果想要保留修改,就用–soft;不想保留修改,就用–hard。


这里以commit_id为例,如果是一个文件,就只是对该文件进行reset,head不移动。

如果reset导致head移动了,需要push –f 强制推送修改,因为他们的commit不匹配了,而这将导致reset之后的commit都丢失了。

git reset [- -mixed] commit_id

将head指向commmit_id,并将index里的文件替换为commit_id对应的状态。

182238202609380

git reset – -soft commit_id

仅将head指向commit_id。此时index仍然指向之前的commit,所以index里面有很多diff文件。workspace里修改的文件还在。

182237338854646

git reset – -hard commit_id

head指向commit_id,index文件是commit_id状态,同时workspace里的文件也被重置为commit_id的状态。

182238305101646