skip to content
usubeni fantasy logo Usubeni Fantasy

代码断舍离

/ 5 min read

未使用代码

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

产生

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

恶果

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

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

清除

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

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

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

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

找回代码

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

Terminal window
git log -G "keywords"

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

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

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

VSCode 时间线

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

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

分支丢失

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

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

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

reflog 测试
Terminal window
# 输入
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 过去就能找到原来分支的内容了。

Terminal window
# 输入
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 残留的记录。

在 fork 使用 reflog

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

评论组件加载中……