有时候,我们用Git的时候有可能commit提交代码后,发现这一次commit的内容是有错误的,那么有两种处理方法:
1、修改错误内容,再次commit一次
2、使用git reset 命令撤销这一次错误的commit
第一种方法比较直接,但会多次一次commit记录。
而我个人更倾向第二种方法,错误的commit没必要保留下来。
那么今天来说一下git reset。它的一句话概括
git-reset - Reset current HEAD to the specified state
意思就是可以让HEAD这个指针指向其他的地方。例如我们有一次commit不是不是很满意,需要回到上一次的Commit里面。那么这个时候就需要通过reset,把HEAD指针指向上一次的commit的点。
它有三种模式,soft,mixed,hard,具体的使用方法下面这张图,展示的很全面了。

1. git reset --hard
reset --hard 会在重置 HEAD 和branch的同时,重置stage区和工作目录里的内容。当你在 reset 后面加了 --hard 参数时,你的stage区和工作目录里的内容会被完全重置为和HEAD的新位置相同的内容。换句话说,就是你的没有commit的修改会被全部擦掉。
例如你在上次 commit 之后又对文件做了一些改动:把修改后的ganmes.txt文件add到stage区,修改后的shopping list.txt保留在工作目录
2. git reset --soft & git reset
参考:Git reset的三种模式
3. 版本回滚之再回来
加入我们已经从版本2回滚到了版本1,那么我们又想从版本1回滚到版本2怎么办?
git reflog
介绍: 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
执行
git reset --hard HEAD~1
,退回到上一个版本,用git reflog则可以看到被删除的commitid(用
git log
则是看不出来被删除的commitid),我们就可以买后悔药,恢复到被删除的那个版本。
操作过程为:
1、
git reflog
查看想要回退到那个版本的哈希码
2、
git reset --hard HEAD^
回退
4. git reset HEAD filename
让文件从暂存区回到工作区,仍保持修改状态