代码断舍离

未使用代码

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

产生

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

恶果

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

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

原文链接

相关推荐
AINative软件工程2 小时前
AI Agent 证据仲裁工程实践:别让检索结果按自信程度撒谎
人工智能·后端·ai编程
卷无止境2 小时前
FastAPI 权限管理实战:从 ACL 到 RBAC 的那些门道
后端·python·fastapi
程序员黑豆9 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
To_OC10 小时前
踩了个 TS 的坑之后,我终于把 type 和 interface 掰明白了
前端·react.js·typescript
GreenTea10 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
风流 少年10 小时前
Spring AI 2.0:Memory
java·后端·spring
浮生望10 小时前
前端API工程化:用 Mock 数据与 Axios 配置实现独立于后端的并行开发
前端
万少11 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
波波00711 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
Brown.alexis12 小时前
es6知识点1-自备使用
前端·ecmascript·es6