!推荐git revert!
问题1:git reset 和 git revert 区别?
git revert : 用一次新的commit来回滚之前的commit.
git reset : 直接删除指定的commit.
1、在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
2、git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容
结论:
如果是自己的分支,当前的提交没有被其他的分支拉取,直接git reset.
如果是develop分支或者要撤销的提交被其他分支拉取过,用git revert.
问题2:提代码后,如何撤销commit?
原生方式
git reset --soft HEAD^
回退多个 git reset --soft HEAD~n
或
git revert <commit id>
(需要手动提交)回退多个 git revert -n def456..jkl012
idea方式
git --> reset Head --> Reset Type 选择 soft -> To Commit 选择 HEAD^1
或
打开git提交历史记录-->Revert Commit
Git Reset 参数
工作区 - 暂存区 - 本地仓库
代码编写及修改是在工作区 - git add 将本地修改添加到暂存区 - git commit 将暂存区中的内容提交到本地仓库
--mixed
git reset的默认参数,即不添加参数的默认值
意思是:不删除工作空间改动代码,撤销commit 和 撤销git add . 操作,回退到工作区
--soft (推荐)
不删除工作空间改动代码,撤销commit,不撤销git add . 操作,
回退到git commit之前,此时处在暂存区。(即执行git add 命令后)
--hard
删除本地改动代码,撤销commit,撤销git add .
(三者的改变全都丢失,即代码的修改内容丢失,直接回退到某个版本;因此我们修改过的代码就没了,需要谨慎使用)
如果你的类型选择的 Hard类型, 此时整个代码空间的代码都会被覆盖,意思就是你修改过的代码全部都没有了
参考链接: