代码断舍离

未使用代码

在代码库中,尤其是祖传代码库中,我们常常能找到不少未使用代码、甚至文件。

产生

  • 写错的,自然产生的
  • 重构时残留的历史代码
  • 重构后未删除原来的文件
  • 复制粘贴的残留代码

恶果

  • 没注释的直接干扰代码理解
  • 注释了也占位置,影响正常代码阅读
  • 影响全局搜索,可能全局搜索出来还在用的只有一两条,剩下的都是未使用的代码
  • 如果全局搜到了根本没引用的陈年文件,你可能还会傻乎乎地浪费时间把它改了
  • 最重要的是,这些代码 99% 以后都不会再用上了,但是你却总觉得会有用上的一天

注意,在多人合作的代码库里,以上问题会被成倍放大。

清除

lint 工具会提示代码中未使用变量,灰了就删了吧。

重构时历史代码不需要保留,至少不需要一直保留。经过靠谱测试的代码上线后一段时间都没问题的话,历史代码就可以删掉了。

之所以要快删,是因为短期内不删掉的话,时间久了也会忘记他保留的原因,导致永远都不敢删除,这十分致命。

我在这鼓吹放胆删除也肯定是有原因的,这些被删掉的代码,如果有一天真要用上,要找回来,那方法也有的是。

找回代码

最传统的方法可以用 git 命令行查找。

sh 复制代码
git log -G "keywords"

git log 其实可以根据关键词筛选 diff 到内容,所以只要记得某个变量名就可以用 git log 搜索相关提交。

当然这个方法还是有点麻烦,如果你用的是个靠谱的 IDE,你可以很方便地看到一个文件的修改记录。

例如在 VSCode 中,左侧的 TIMELINE 就是你的文件时光机。

可以注意到,除了 git 的 commit 记录,本地保存都会被备份,而且记录时间非常长,我翻了一下一个老项目,看到几个月前的本地修改都仍然保留着。

也因为这个记录机制,即使你不小心把文件删了(例如 git 没有提交,手贱直接把修改放弃了),VSCode 也能帮你找回来,Ctrl + shift + p 然后输入 Local History: Find Entry to Restore 即可。

分支丢失

虽然有一点跑题,但是找回代码说了,就顺便说说怎么找回分支吧。毕竟也罕见地存在着分支没 push 还被手贱删掉的情况。

git 是一个很安全的系统,只要你 commit 了,不整什么骚操作的话提交是总能找回来的。

短期内丢失的分支(默认好像是 90 天内),可以通过 reflog 找回来。

sh 复制代码
# 输入
git reflog

# 输出
6294b5b (HEAD -> main, origin/main, origin/HEAD) HEAD@{0}: checkout: moving from test-reflog to main
5c64ce5 HEAD@{1}: checkout: moving from main to test-reflog

5c64ce5 是原来 test-reflog 分支的 SHA,然后我们直接 checkout 过去就能找到原来分支的内容了。

sh 复制代码
# 输入
git checkout 5c64ce5

# 输出
Note: switching to '5c64ce5'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5c64ce5 test: reflog

你也可以在 Fork 中通过图形界面 直接观察到 reflog 保留的数据,下图可以看到两次 rebase 残留的记录。

就先写到这了,对代码断舍离,清爽的代码库,你和你的团队都值得拥有。

原文链接

相关推荐
WeiXin_DZbishe4 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
刘发财4 小时前
前端如何生成10000页PDF文件?
前端·javascript·开源
WeiXin_DZbishe5 小时前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计
A接拉起0075 小时前
2026 年 JavaScript 开发者需要了解的知识
前端·javascript·后端
用户11481867894845 小时前
面试官:大屏项目里十几个模块同时渲染上万条数据,怎么做到不卡?
前端·性能优化
高晶5 小时前
Android 新手实战:从零搭建 WebRTC 在线直播系统
android·程序员
前端市界5 小时前
Pro React Admin: 统一工程底座,承载多种应用...
前端·github
Bazingga5 小时前
RAG评测体系保姆级教程:生产级实践指南
后端
葡萄城技术团队5 小时前
dsh-spreadjs-editor 当前支持什么:安装前需要了解的几件事
前端
三*一6 小时前
优化修整算法
前端·javascript·算法