git reset:
hard模式:
reset --hard 会在重置 HEAD 和branch的同时,重置stage区和工作目录里的内容。当你在 reset 后面加了 --hard 参数时,你的stage区和工作目录里的内容会被完全重置为和HEAD的新位置相同的内容。换句话说,就是你的没有commit的修改会被全部擦掉。
如果输入 git reset --hard HEAD^,这时候不仅stage区和工作目录的内容被擦掉了,而且HEAD和当前branch分支会切换到上一条commit中。
soft模式:
reset --soft 会在重置 HEAD 和 branch 时,保留工作目录和暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区。这种模式下会保存工作区的内容;
hard和soft区别在于,hard会清空工作目录和暂存区,soft会保留工作目录;
mixed模式:
默认情况下的模式,reset不加参数,就是mixed模式;
保留工作区目录,清空暂存区。把工作区修改,暂存区的内容以及reset导致的新文件差异都放进工作目录中。简而言之,把所有差异都混合放在工作目录中。
所以如果想把暂存区和工作区的内容都撤销:
git reset --hard
//如果加上参数还可以撤销已经commit的内容 例如:git reset --hard HEAD^
如果仅仅撤销工作区的内容:
git checkout --file
说到底reset的本质是移动HEAD,起到了撤销commit的作用。同时配合参数还可以修改工作区和暂存区(具体影响看模式,hard,soft,mixed)。
参考链接:
Git学习02 --暂存区,撤销修改,删除文件:https://www.cnblogs.com/zqlmmd/p/5541334.html
撤销修改(撤销本地工作区的修改):https://blog.csdn.net/tsq292978891/article/details/78966550
Git reset三种模式:https://www.jianshu.com/p/c2ec5f06cf1a