Git命令_git reset和撤销commit、暂存区或工作区的修改

git reset:

hard模式:

reset --hard 会在重置 HEADbranch的同时,重置stage区和工作目录里的内容。当你在 reset 后面加了 --hard 参数时,你的stage区和工作目录里的内容会被完全重置为和HEAD的新位置相同的内容。换句话说,就是你的没有commit的修改会被全部擦掉。

如果输入 git reset --hard HEAD^,这时候不仅stage区和工作目录的内容被擦掉了,而且HEAD和当前branch分支会切换到上一条commit中。

soft模式:

reset --soft 会在重置 HEADbranch 时,保留工作目录和暂存区中的内容,并把重置 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