git reset到提交前的状态

有时候,我们用Git的时候有可能commit提交代码后,发现这一次commit的内容是有错误的,那么有两种处理方法:
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,回到上一次没有修改代码提交前,也就是回到注释是“排序“的时候

posted @ 2022-10-11 16:46  JustJavaIt  阅读(854)  评论(0编辑  收藏  举报