代码断舍离

未使用代码

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

产生

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

恶果

  • 没注释的直接干扰代码理解
  • 注释了也占位置,影响正常代码阅读
  • 影响全局搜索,可能全局搜索出来还在用的只有一两条,剩下的都是未使用的代码
  • 如果全局搜到了根本没引用的陈年文件,你可能还会傻乎乎地浪费时间把它改了
  • 最重要的是,这些代码 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 残留的记录。

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

原文链接

相关推荐
酉鬼女又兒13 分钟前
零基础快速入门前端Web存储(sessionStorage & localStorage)知识点详解与蓝桥杯考点应用(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·职场和发展·蓝桥杯·html
DanCheOo18 分钟前
# 从"会用 AI"到"架构 AI":高级前端的认知升级
前端·ai编程
阿里嘎多学长20 分钟前
2026-03-31 GitHub 热点项目精选
开发语言·程序员·github·代码托管
社恐的下水道蟑螂21 分钟前
前端面试必问 Git 通关指南:常用命令速查 + merge/rebase 深度辨析,看完再也不慌
前端·git·面试
派星25 分钟前
如何分享自己写的 Go 包
后端
snakeshe101026 分钟前
从零理解 Spring 核心:IoC 容器与依赖注入,以及手写一个迷你版
后端
1486129 分钟前
Redis 删除缓存失败怎么办?重试、死信、补偿的工程化方案
后端
None32129 分钟前
NestJS 流式文件上传实践:从 Multer 到 Busboy 的进阶之路
前端·后端
海浪浪31 分钟前
Symbol 产生的背景以及应用场景
前端·javascript
1486131 分钟前
MySQL 复合索引怎么设计?从业务 SQL 反推索引顺序
后端