git reset到提交前的状态
1、修改错误内容,再次commit一次
2、使用git reset 命令撤销这一次错误的commit
第一种方法比较直接,但会多次一次commit记录,错误的commit其实没必要保留下来。
前提知识--Git的基本流程和Git reset的三种模式
实战
好比你的需求(把某字段的注释从“排序“改为了”弹窗顺序“)完成了,你commit后已经push到远程了。
提交历史
我们先来讨论几种场景:
(1) 你在合并到dev分支进行测试的时候发现有bug。
(2) 产品说这个需求不做了。
(3) 当前分支还有之前的需求push了,但没有合到远程master分支去部署,然而你这次开发的需求又push到同一个分支了,产品要求先把上个需求先上了。
Reset步骤
现在想要回退到修改字段注释前,即字段的注释为“顺序“时,我们可以先Reset到上一个提交,即图中的【修改】提交历史处。
点击后会出现弹窗让你选择Reset的模式,假如场景是(2)产品说这次的需求不需要了,也就是放弃目前本地的所有改变,那么我们可以选择hard的模式。
选择Hard的操作,等价于命令行 git reset --hard HEAD~1 ,后面1,表示我已经commit1次了,这次不想要了, 如果2次,就写2。
代码会恢复到这次修改前
同时发现Git的Log里面你的提交历史也重置回去了
如果你已经push过,那么这时我们需要强制提交到当前分支的远程分支,也就是直接覆盖掉远程这次需求提交的代码。
此操作等价于命令 git push -f origin 分支名字
如果你不强制提交到远程的话,那么当你update的时候会和你之前提交的“弹窗顺序“产生冲突。
如果你的场景是(3)想要先stash,把之前的写的需求先部署,后面再unstash回来修改这次的需求,没问题后再上线,那么你可以选择Soft Reset。
等价于命令行 git reset --soft HEAD~1
那么就会回到你commit前的状态(保留你的暂存区和工作目录)
这时你可以直接修改代码后,再commit再强制push,或者直接stash,再强制push,回到上一次没有修改代码提交前,也就是回到注释是“排序“的时候