怎么用?
git reset --mixd(默认,该模式可不指定) HEAD^
git reset --soft HEAD^
git reset --hard HEAD^
head^是最新一次提交,如果指定提交版本id,可以回退指定的版本。
区别:
git reset --mixed:撤销上一次commit和add,回到本地编辑的状态,把上次已经commit提交的内容和已经add到暂存区的内容,都撤销,放回到本地工作区,需要重新add和commit。
git reset --soft:撤销上一次commit,回到git add.的状态,把已经提交到仓库的内容撤销放回暂存区中,本地工作区还没add的内容不受影响。
git reset --hard:撤销上一次对文件的所有修改,包括暂存区和上次已经提交到远程仓库的内容通通清除。
使用场景:
-
--hard:(1) 要放弃目前本地的所有改变時,即去掉所有add到暂存区的文件和工作区的文件,可以执行 git reset -hard HEAD 来强制恢复git管理的文件夹的內容及状态;(2) 真的想抛弃目标节点后的所有commit(可能觉得目标节点到原节点之间的commit提交都是错了,之前所有的commit有问题)。
-
--soft:原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files),所以假如我们之前工作目录没有改过任何文件,也没add到暂存区,那么使用reset --soft后,我们可以直接执行 git commit 將 index暂存区中的內容提交至 repository 中。为什么要这样呢?这样做的使用场景是:假如我们想合并「当前节点」与「reset目标节点」之间不具太大意义的 commit 记录(可能是阶段性地频繁提交,就是开发一个功能的时候,改或者增加一个文件的时候就commit,这样做导致一个完整的功能可能会好多个commit点,这时假如你需要把这些commit整合成一个commit的时候)時,可以考虑使用reset --soft来让 commit 演进线图较为清晰。总而言之,可以使用--soft合并commit节点。
-
--mixed(默认):(1)使用完reset --mixed后,我們可以直接执行 git add 将這些改变果的文件內容加入 index 暂存区中,再执行 git commit 将 Index暂存区 中的內容提交至Repository中,这样一样可以达到合并commit节点的效果(与上面--soft合并commit节点差不多,只是多了git add添加到暂存区的操作);(2)移除所有Index暂存区中准备要提交的文件(Staged files),我们可以执行 git reset HEAD 来 Unstage 所有已列入 Index暂存区 的待提交的文件。(有时候发现add错文件到暂存区,就可以使用命令)。(3)commit提交某些错误代码,或者没有必要的文件也被commit上去,不想再修改错误再commit(因为会留下一个错误commit点),可以回退到正确的commit点上,然后所有原节点和reset节点之间差异会返回工作目录,假如有个没必要的文件的话就可以直接删除了,再commit上去就OK了。
作者:carway
链接:https://www.jianshu.com/p/c2ec5f06cf1a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
参考链接:https://www.jianshu.com/p/c2ec5f06cf1ahttps://www.jianshu.com/p/c2ec5f06cf1a