使用场景
将branch版本reset到指定的commit,这是一个大杀器,慎用。一般说来,只能对付自己,不可对付别人.
如果你在自己的私有branch上做那一个bug fix,commit那,假设是commit_A,测一测发现还是不行,这个时候,你就可以选择reset到倒数第二个commit,假设是 commit_B,commit_A就会永远从git object里面消失,你使用git log也看不见它,但是此时commit_A中你修改过的文件,可能会处在modified状态,涵盖你错误的commit_A里面的修改,也同时使用>>>>来标示,需要你人肉重新修改,或者使用git checkout沿用commit_B版本,验证后重新提交,形成一个新的commit_C。
使用方法
$ git reset 332738ae8b206d8ef7b8392a1783b7fcc52223f8 Unstaged changes after reset: M main.cc
恢复被reset delete掉的commit
人就是这么纠结,commit,后悔,reset,又后悔,恩,还好,这里有后悔药售,但是后悔药有期限</br> 当你想恢复一个被reset的commit的时候,本质上这和你要reset到一个其它的commit并没有区别
$git reset --hard commit_has_been_deleted_by_reset
既然都被delete那,怎么去找到commit id呢,有些脑筋活泛的家伙,立刻会问,答案如下
$ git reflog 1a75c1d... HEAD@{0}: reset --hard HEAD^: updating HEAD f6e5064... HEAD@{1}: commit: added file2
假设你是因为后悔最近一次reset,干掉那新加的文件file2,那么你应该恢复到file2所在commit
$git reset --hard f6e5064
前面说到那,这份后悔是有个期限的,期限有多长?git 做垃圾回收的时间那么长,大概是2-3星期,个把月,视git心情而定。。。