面试官:Git 如何撤回已 Push 的代码?问倒一大片...

Java后端技术

共 1912字,需浏览 4分钟

 · 2024-04-11

    
      
        

往期热门文章:

            

1、SpringBoot 如何快速过滤出一次请求的所有日志? 2、千万不要把 Request 传递到异步线程里面!有坑! 3、别再用 offset 和 limit 分页了,性能太差! 4、8种专坑同事 SQL写法,性能降低100倍,不来看看? 5、Spring Boot 项目统一结果,统一异常,统一日志,写的太好了!

面试官问:Git 如何撤回已 Push 的代码?如果问你,你会吗? 有两种解决方法,如下:
  • 最简单粗暴的方法
  • IDEA 中 Git 较为优雅的方法
在日常的开发中,我们经常使用Git来进行版本控制。有时候,我们可能会不小心将错误的代码 Push 到远程仓库,或者想要在本地回退到之前的某个版本重新开发。 或者像我一样,写了一些感觉以后很有用的优化方案push到线上,又接到了一个新的需求。但是呢,项目比较重要,没有经过测试的方案不能轻易上线,为了承接需求只能先把push上去的优化方案先下掉。 现在我的分支是这样的,我想要在本地和远程仓库中都恢复到help文档提交 的部分。

25463287cc12137236111a1c050ad47c.webp

最简单粗暴的方法

如果你的错误代码不是很多,那么你其实可以通过与你想要恢复到的commit进行对比,然后手动删除错误代码,然后删除不同的代码。

f143260497c65984830dc31ac8af58f8.webp

按住 ctrl 选择想要对比的两个commit,然后选择 Compare Versions 就能通过对比删除掉你想要删除的代码。 这个方案在代码很简单时时非常有效的,甚至还能通过删除后最新commit和想要退回的commit在Compare 一下保障代码一致。 但是这个方法对于代码比较复杂的情况来说就不太好处理了,如果涉及到繁杂的配置文件,那更是让人头疼。 而且,这样还会保留错误提交的记录,对于有强迫症的我来说,有点接受不能。对此,git也有一套较为优雅的操作流程,同样能解决这个问题。

IDEA 中 Git 较为优雅的方法

1.Reset Current Branch 到你想要恢复的commit记录

ddf44be4cc2818025be689c0198cfe1f.webp

这个时候会跳出四个选项供你选择,我这里是选择 hard 其他选项的含义仅供参考 ,因为我也没有一一尝试过。
    Soft :#你之前写的不会改变,你之前暂存过的文件还在暂存。
Mixed :#你之前写的不会改变,你之前暂存过的文件不会暂存。
Hard :#文件恢复到所选提交状态,任何更改都会丢失。你已经提交了,然后你又在本地更改了,如果你选hard,那么提交的内容和你提交后又本地修改未提交的内容都会丢失。
keep :#任何本地更改都将丢失,文件将恢复到所选提交的状态,但本地更改将保持不变。你已经提交了,然后你又在本地更改了,如果你选keep,那么提交的内容会丢失,你提交后又本地修改未提交的内容不会丢失。

23894ee26f28f0424b80e6d17438bb39.webp20edf66f76e4f83be488ffbc588b82c5.webpf8274b439eb0467e1da65de6b6ac8f03.webp

然后,之前错误提交的commit就在本地给干掉了。但是远程仓库中的提交还是原来的样子,你要把目前状态同步到远程仓库。也就是需要把那几个commit删除的操作push过去。 打开push界面,虽然没有commit需要提交,需要点击 Force Push ,强推过去。

20edf66f76e4f83be488ffbc588b82c5.webp

需要注意的是对于一些被保护的分支,这个操作是不能进行的。需要自行查看配置,我这里因为不是master分支,所以没有保护。

81231fcbe350842f12a01ece98dc385e.webp

可以看到,远程仓库中最新的commit只有我们的help文档 。在其上的三个提交都没了。

c6eaf9a09a792f9f0a0a704b711b9f88.webp

注意: 以上使用的是2023版IDEA,如果有出入的话可以考虑搜索使用git命令。
    
        
          往期热门文章:
        
      
    

1 知乎热议:为什么多数程序员都不做个人独立开发? 2、谷歌搜索杀死了网页缓存 3、项目终于用上了Spring状态机,那叫一个优雅! 4、我,40岁码农,还在荷兰写低级代码,不敢回国… 5、MyBatis Plus 解决大数据量查询慢问题 6、Spring赌上未来:响应式的 WebFlux 框架更优雅,性能更强! 7、 面试官问我 ,try catch 应该在 for 循环里面还是外面?

8、4 种策略让 MySQL 和 Redis 数据保持一致

9、Spring Boot 封装一个万能 Excel 导出工具,传什么都能导出! 10、盘点那些令人目瞪口呆的 bug!
浏览 4
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报