git reset可以说是一个很好的后悔药,我们在commit之后往往会突然发现这不是我想要的,以下例子很好的解释了reset的三个参数的用法和意义
git reset
在上述中hard soft mixed的参数我们可以新建例子看看
touch a && git add a && git commit -m '新建a'
touch b && git add b && git commit -m '新建b'
touch c && git add c && git commit -m '新建c'
1、使用hard参数回退到a的提交
git reset --hard head~2
已经回退到a的提交,在执行git status看看
这时候我们再试试使用soft参数,依旧是上面的例子:
git reset --soft head~2
控制台没有任何输出信息,那就是好消息,我们看看
的确回退,在执行git status看看
发现是原来soft参数只是将commit撤销了,但是add还是会保存
最后看看mixed参数
在执行看看git status
于是我们可以总结git reset三个参数的含义:
hard是最危险的,会丢掉修改的文件,如果我们执行之后又后悔了可以使用时光机git reflog找回,当然还是要慎重
soft相对于hard而言,只是撤销了commit操作,保留了add操作
mixed参数则是撤销了commit和add操作,修改的·内容还是存在
当我们在开发时候,我们在feature开发时候,突然接受了一个紧急需求需要开发某个功能,于是我们新建分支featureb进行开发,很愉快的敲着代码并且commit,就在要push时候发现,我在feature进行开发那个新的紧急需求了,怎么办:
这里我们只是commit并没有push,那我们就可以使用上述的"后悔药"
-1、首先进行git reset --soft head~n(看你多少次commit)
-2、将撤销的代码stash起来,git stash
-3、git checkout featureb
-4、git stash pop
上述就将开发的代码转移到featureb中了,接下来进行commit就行了