公司新来工作3年的同事问我怎么回滚他刚刚修改的代码。他说他不能做很长时间。他以前用过SVN,没用过Git。真的醉了.回滚代码是我们程序员经常需要操作的东西。使用SVN很简单,但是使用Git并不难。Git还有很多好用的客户端(比如Sourcetree),简单的回滚操作是没有问题的。如果你喜欢用Git命令行,也可以用gitrevert,不过它有回滚痕迹,而且会多一条commit记录。今天栈长给大家介绍一些理想状态无痕回滚。本文不会介绍Git的一些基本概念和使用,也不会关注公众号Java技术栈和后台回复git阅读。1.Uncommitted未提交有以下两种情况:1)文件在工作区已经被修改,但是还没有被gitadd提交到暂存区。2)已经执行了gitadd提交到暂存,但是还没有执行gitcommit提交到本地仓库。这时候回滚:gitreset--hard相当于清空暂存区和工作区,本地仓库回滚到最新的提交状态。2、提交未推送这种情况是指已经执行了gitadd提交到暂存区,执行了gitcommit提交到本地仓库,但是gitpush还没有推送到远程仓库。2.1回滚上一个版本:gitreset--hardHEAD^2.2回滚多个版本:gitreset--hardHEAD~NN:代表一个数字,回滚的次数。2.3回滚指定版本:gitreset--hard2.4直接回滚到远程最新版本:gitreset--hardorigin/master3。pushed表示gitadd已经执行提交到暂存区,执行gitcommit提交本地仓库,执行gitpush推送到远程仓库。参考上面2.1~2.4的方法,先强制回滚到本地仓库到最近N个版本,然后强制推送到远程仓库。回到上一个版本例子:gitreset--hardHEAD^gitpush-f总结第一种情况一般在工具上操作起来很方便,比如Sourcetree:但是2、3种情况不能在工具上操作是的,至少不是在Sourcetree上,需要在命令行回滚,知道的可以分享一下。以上总结了栈管理器常用的一些Git回滚方法。当然,还有一些其他的回滚方法。以上就够了,希望对大家有所帮助。后面也会分享一些平时用来修改历史记录的实用干货,比如如何修改历史提交信息,合并多次提交等,关注公众号Java技术栈第一时间推送。如果你有所收获,请支持三联~好了,今天的分享就到这里,后面栈长会分享更多有趣的Java技术和最新的技术资料,关注公众号Java技术栈第一时间推送,我也整理了主流的Git面试题和参考答案,在公众号后台回答关键词“面试”刷题。版权声明:本文为公众号《Java技术栈》原创。转载、引用本文内容请注明出处。抄袭、洗稿均属侵权投诉,后果自负,并保留追究法律责任的权利。近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.不要用爆破爆满画面,试试装饰者模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!