# AI自习室 — 全部内容 (中文) Generated: 2026-05-09 --- ## Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战 URL: https://dingjiu1989-hue.github.io/tech/git-advanced.html 如果你已经会 add/commit/push/pull,是时候学这三个进阶命令了。它们不会让你每天多用 Git,但在关键时刻能省下几个小时。 ## 交互式 Rebase:整理你的提交历史 场景:你吭哧吭哧写了一下午,做了 12 个小提交,但提交信息都是 "wip"、"fix"、"fix again"。现在要提交 PR 了——这些乱七八糟的提交历史会让同事鄙视你。 git rebase -i HEAD~12 会打开编辑器,列出最近 12 个提交: pick a1b2c3d wip pick e4f5g6h fix typo pick i7j8k9l fix again pick m0n1o2p actually works now ... 核心操作: * **squash (s)** — 把当前提交合并到上一个,保留所有更改但合并为一个提交 * **fixup (f)** — 类似 squash,但丢弃当前提交的信息(适合那些 "wip" 提交) * **reword (r)** — 只改提交信息,不改内容 * **drop (d)** — 删除这个提交 * **edit (e)** — 停下来让你修改这个提交的内容 把 12 个乱七八糟的提交整理成 3 个逻辑清晰的提交: pick a1b2c3d feat: 添加用户登录 API fixup e4f5g6h wip fixup i7j8k9l fix typo pick m0n1o2p feat: 添加 JWT Token 验证 fixup n2o3p4q fix again pick r5s6t7u docs: 更新 API 文档 fixup v8w9x0y wip doc 保存退出,Git 自动完成。提交历史从一团乱麻变成清晰的叙事。**注意:只在还没 push 的分支上做 rebase。已经 push 的提交,rebase 会改写历史,需要 force push——在共享分支上这是灾难。** ## Cherry-Pick:精准移植代码 场景:你在 feature-A 分支上写了一个特别好用的工具函数,feature-B 也需要它。但你不想合并整个 feature-A 分支。 # 找到那个提交的 hash git log feature-A --oneline # 摘樱桃 git checkout feature-B git cherry-pick a1b2c3d Git 会把这个提交的变更单独应用到 feature-B 上,生成一个新的提交(hash 不同,内容相同)。 常见用法: * **移植 Bug 修复** — 在 hotfix 分支修了一个 Bug,cherry-pick 到 main 和 dev 分支 * **复用工具代码** — 在一个分支写的基础组件,移植到另一个分支 * **回滚后重新应用** — revert 了一个提交后又想加回来 # 一次 cherry-pick 多个提交 git cherry-pick a1b2c3d e4f5g6h i7j8k9l # 如果冲突了 git cherry-pick a1b2c3d # 解决冲突... git add . git cherry-pick --continue # 放弃这次 cherry-pick git cherry-pick --abort ## Git Bisect:二分法定位 Bug 场景:两周前一切正常,今天发现一个 Bug,但中间有 200 个提交。是谁引入的? Bisect 用二分查找自动定位——你只需要告诉 Git 哪个提交是好的、哪个是坏的,然后 Git 切到中间点让你测试。 git bisect start git bisect bad HEAD # 当前版本有 Bug git bisect good v2.0.0 # v2.0.0 是正常的 # Git 自动切到中间某个提交 # 测试这个版本有没有 Bug... # 如果有 Bug: git bisect bad # 如果正常: git bisect good # 重复 5-8 次,Git 定位到引入 Bug 的那个提交 # de7f3a2 is the first bad commit # 结束 bisect git bisect reset 200 个提交,log2(200) ≈ 8 次测试就能定位。比一个一个找快 25 倍。 # 自动化 bisect(如果你的测试可以用脚本跑) git bisect start git bisect bad HEAD git bisect good v2.0.0 git bisect run python test_specific_feature.py # Git 自动二分查找,输出引入 Bug 的提交 ## 总结 命令| 用途| 一句话 ---|---|--- `git rebase -i`| 整理提交历史| 把 12 个 wip 整理成 3 个清晰的 commit `git cherry-pick`| 移植单个提交| 把 A 分支的好代码复制到 B 分支 `git bisect`| 二分查找 Bug| 从 200 个提交中快速定位是谁引入的 Bug 这三个命令是高级 Git 用户的标志。不需要每天用,但需要的时候知道怎么用——你的同事会以为你是 Git 魔法师。 ### 📖 相关推荐 * [Git 常用命令速查表]() * [单元测试入门:从零到写出第一个可维护的测试]() * [REST API 设计最佳实践:写出让人愿意用的接口]() **See also:** [Git 常用命令速查表](), [VS Code 十大必备插件:让编码效率翻倍](), [10 款开发者必备的命令行工具(2026 版)](). --- ## 单元测试入门:从零到写出第一个可维护的测试 URL: https://dingjiu1989-hue.github.io/tech/unit-testing-guide.html 写单元测试是你从"会写代码"到"专业开发者"的分水岭。这篇文章用最少的理论带你直接上手。 ## 为什么必须写测试 * **重构有底气** — 有测试覆盖的代码,改完跑一次就知道有没有破坏现有功能 * **文档即测试** — 测试描述了函数在各种输入下应该如何表现,比注释更可靠 * **减少回归 Bug** — 修一个 Bug 加一个测试,同样的错不会再犯第二次 ## AAA 模式(Arrange-Act-Assert) def test_add_two_numbers(): # Arrange(准备) a, b = 2, 3 # Act(执行) result = add(a, b) # Assert(断言) assert result == 5 ## 第一个真实测试 # user_service.py def get_full_name(user): return f"{user.first_name} {user.last_name}" # test_user_service.py def test_get_full_name(): user = type('User', (), {'first_name': '张', 'last_name': '三'})() assert get_full_name(user) == "张 三" def test_get_full_name_empty_last(): user = type('User', (), {'first_name': '李', 'last_name': ''})() assert get_full_name(user) == "李 " ## Mock 和 Fixture # Fixture: 共享的测试数据 @pytest.fixture def sample_user(): return User(id=1, name="张三", email="zhang@test.com") def test_user_email(sample_user): assert sample_user.email == "zhang@test.com" # Mock: 隔离外部依赖 @patch("requests.get") def test_fetch_user(mock_get): mock_get.return_value.json.return_value = {"name": "张三"} result = fetch_user(1) assert result["name"] == "张三" ## 什么该测、什么不该测 * **该测** — 业务逻辑、边界条件、错误路径、数据转换 * **不该测** — 简单的 getter/setter、框架代码、第三方库的内部行为 ## 起步建议 不用追求 100% 覆盖率——那会增加大量维护负担。先给核心业务逻辑写测试,看到覆盖率数字攀升的成就感会推着你继续写。 ### 📖 相关推荐 * [Python 入门教程:从零到写出第一个程序]() * [Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战]() * [REST API 设计最佳实践:写出让人愿意用的接口]() **See also:** [Python 入门教程:从零到写出第一个程序](), [正则表达式 30 分钟入门指南](), [OpenAI API 入门:用 10 行代码调用 GPT](). --- ## REST API 设计最佳实践:写出让人愿意用的接口 URL: https://dingjiu1989-hue.github.io/tech/rest-api-best-practices.html 好的 API 设计让调用方心情愉悦,坏的 API 让他们想砸键盘。这篇文章总结 10 条实战验证的设计原则。 ## URL 设计原则 * **用名词复数而非动词** — `GET /users` 不是 `GET /getUsers`。HTTP 方法已经表达了动作。 * **层级关系用嵌套 URL** — `GET /users/123/orders` 清晰表达了"用户 123 的订单"。 * **不要超过 3 层** — `/users/123/orders/456/items` 太深了,这种情况拆成 `/orders/456/items`。 * **用 kebab-case 不用 camelCase** — `/shipping-address` 不是 `/shippingAddress`。SEO 友好,肉眼易读。 ## HTTP 方法正确使用 方法| 操作| 幂等?| 示例 ---|---|---|--- GET| 读取| ✅| `GET /articles` POST| 创建| ❌| `POST /articles` PUT| 全量更新| ✅| `PUT /articles/1` PATCH| 部分更新| ❌| `PATCH /articles/1` DELETE| 删除| ✅| `DELETE /articles/1` ## 响应格式规范 { "data": { "id": 1, "title": "..." }, "meta": { "page": 1, "per_page": 20, "total": 150 }, "errors": null } ## 错误处理 * **用正确的 HTTP 状态码** — 400 参数错误、401 未认证、403 无权限、404 不存在、422 参数校验失败、429 频率限制、500 服务器错误。 * **错误信息结构化** — 返回 `{"errors":[{"code":"VALIDATION_ERROR","field":"email","message":"邮箱格式不正确"}]}`,不要只返回一个字符串。 ## 五大常见反模式 1. **所有操作都用 POST** — 这是 RPC 不是 REST 2. **返回所有字段** — 支持 `?fields=id,title` 让客户端选择需要的字段 3. **不版本化** — URL 加 `/v1/` 前缀或在 Header 中指定版本 4. **不限制分页** — `per_page` 最大 100,防止一次请求拖垮数据库 5. **不写 API 文档** — OpenAPI/Swagger 规范是标配 ### 📖 相关推荐 * [Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战]() * [单元测试入门:从零到写出第一个可维护的测试]() * [正则表达式 30 分钟入门指南]() **See also:** [30 个免费又好用的 API 合集:开发者必备](), [OpenAI API 入门:用 10 行代码调用 GPT](), [AI 自动化工作流实战:让 AI 替你干重复活](). --- ## 正则表达式 30 分钟入门指南 URL: https://dingjiu1989-hue.github.io/tech/regex-guide.html 正则表达式是文本处理的瑞士军刀——验证表单、提取数据、搜索替换,没有比它更强的工具。学会它,一辈子受益。 ## 基础元字符 符号| 含义| 示例匹配 ---|---|--- .| 任意单个字符| a.c → abc, a1c \d| 数字| \d\d\d → 123, 456 \w| 字母数字下划线| \w+ → hello_world \s| 空白字符| a\sb → "a b" [abc]| 字符组,匹配 a/b/c| [aeiou] → 元音字母 [^abc]| 取反,不匹配 a/b/c| [^0-9] → 非数字 ## 量词 符号| 含义 ---|--- *| 0 次或多次 +| 1 次或多次 ?| 0 次或 1 次 {n}| 恰好 n 次 {n,m}| n 到 m 次 ## 实战 5 例 # 1. 验证手机号(中国大陆) ^1[3-9]\d{9}$ # 2. 提取邮箱地址 [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} # 3. 匹配 URL https?://[\w.-]+(:\d+)?(/[\w./-]*)? # 4. 提取 HTML 标签内容 >([^<]+)< # 5. 验证日期格式 YYYY-MM-DD ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ ## 分组和捕获 # 匹配 "2026-05-07",分别捕获年月日 (\d{4})-(\d{2})-(\d{2}) # Python 中可以用 group(1) group(2) group(3) 获取 # 等价于 \1 \2 \3 在替换中引用 ## 零宽断言(进阶) 符号| 含义| 示例 ---|---|--- (?=...)| 正向前瞻| \d+(?=元) 匹配"50元"中的50 (?<=...)| 正向后顾| (?<=¥)\d+ 匹配"¥50"中的50 (?!...)| 负向前瞻| \d+(?!元) 匹配后不跟"元"的数字 ## 练习是关键 推荐在 **regex101.com** 上实操练习,它有交互式解释器、多语言支持和测试用例功能。每天练 2 个正则,一周后你就能随手写出匹配规则了。 ### 📖 相关推荐 * [Linux 命令行入门:30 个最常用的命令]() * [Python 入门教程:从零到写出第一个程序]() * [Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战]() **See also:** [Python 入门教程:从零到写出第一个程序](), [单元测试入门:从零到写出第一个可维护的测试](), [OpenAI API 入门:用 10 行代码调用 GPT](). --- ## Linux 命令行入门:30 个最常用的命令 URL: https://dingjiu1989-hue.github.io/tech/linux-commands.html 不管你做不做运维,Linux 命令行都是程序员的必修课。这 30 个命令覆盖 80% 日常场景。 ## 文件操作(10 个) 命令| 用途| 示例 ---|---|--- ls| 列出目录| `ls -la` cd| 切换目录| `cd /var/log` pwd| 显示当前路径| `pwd` mkdir| 创建目录| `mkdir -p a/b/c` cp| 复制文件| `cp -r src dst` mv| 移动/重命名| `mv old.txt new.txt` rm| 删除| `rm -rf dir/` cat| 查看文件内容| `cat file.txt` head/tail| 查看头/尾行| `tail -f log.txt` find| 搜索文件| `find . -name "*.py"` ## 文本处理(6 个) 命令| 用途| 示例 ---|---|--- grep| 文本搜索| `grep "error" log.txt` wc| 统计行/字数| `wc -l file.txt` sort| 排序| `sort -n data.txt` uniq| 去重| `sort file.txt | uniq -c` sed| 流编辑器| `sed 's/old/new/g' file.txt` awk| 列处理| `awk '{print $1}' data.txt` ## 权限管理(3 个) 命令| 用途| 示例 ---|---|--- chmod| 修改权限| `chmod +x script.sh` chown| 修改所有者| `chown user:group file` sudo| 超级用户权限| `sudo systemctl restart nginx` ## 系统信息(5 个) 命令| 用途 ---|--- ps aux| 查看进程 top/htop| 实时资源监控 df -h| 磁盘空间 free -h| 内存使用 uname -a| 系统信息 ## 网络(3 个) 命令| 用途 ---|--- curl| 发送 HTTP 请求 ping| 测试连通性 netstat| 网络连接状态 ## 管道和重定向(3 个) 符号| 用途| 示例 ---|---|--- || 管道| `cat log.txt | grep error | wc -l` >| 输出重定向| `echo "hello" > file.txt` >>| 追加输出| `echo "world" >> file.txt` ## 推荐学习路径 先掌握文件操作 → 文本处理 → 管道重定向(这是 Linux 的精髓)→ 权限管理 → Shell 脚本编写。 ### 📖 相关推荐 * [正则表达式 30 分钟入门指南]() * [Python 入门教程:从零到写出第一个程序]() * [Git 常用命令速查表]() **See also:** [Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战](), [单元测试入门:从零到写出第一个可维护的测试](), [REST API 设计最佳实践:写出让人愿意用的接口](). --- ## Python 入门教程:从零到写出第一个程序 URL: https://dingjiu1989-hue.github.io/tech/python-tutorial.html Python 是最适合初学者的编程语言——语法接近自然语言,生态强大到几乎无所不能。这篇教程带你 30 分钟入门。 ## 安装 Python macOS 自带 Python 3,终端输入 `python3 --version` 检查。Windows 去 python.org 下载安装包,安装时勾选 "Add Python to PATH"。 ## 第一个程序 print("Hello, World!") 保存为 `hello.py`,终端运行 `python3 hello.py`,看到输出就成功了。 ## 变量和数据类型 name = "小明" # 字符串 age = 25 # 整数 height = 1.75 # 浮点数 is_student = True # 布尔值 print(f"{name}今年{age}岁") ## 条件判断 score = 85 if score >= 90: print("优秀") elif score >= 60: print("及格") else: print("不及格") ## 循环 # for 循环 for i in range(5): print(f"第{i+1}次") # while 循环 count = 0 while count < 3: print(f"count = {count}") count += 1 ## 列表和字典 # 列表 — 有序集合 fruits = ["苹果", "香蕉", "橘子"] fruits.append("葡萄") print(fruits[0]) # 苹果 # 字典 — 键值对 user = {"name": "小明", "age": 25, "city": "北京"} print(user["name"]) # 小明 ## 函数 def greet(name): return f"你好,{name}!" print(greet("小明")) # 你好,小明! ## 下一步学什么 1. **pip 包管理** — 安装第三方库 2. **文件读写** — 处理文本和 CSV 3. **requests 库** — 爬取网页和调用 API 4. **Flask** — 写一个简单的 Web 应用 ### 📖 相关推荐 * [单元测试入门:从零到写出第一个可维护的测试]() * [正则表达式 30 分钟入门指南]() * [Linux 命令行入门:30 个最常用的命令]() **See also:** [正则表达式 30 分钟入门指南](), [单元测试入门:从零到写出第一个可维护的测试](), [OpenAI API 入门:用 10 行代码调用 GPT](). --- ## GitHub Copilot 完全使用指南:从安装到高效协作 URL: https://dingjiu1989-hue.github.io/tech/github-copilot-guide.html GitHub Copilot 是目前最成熟的 AI 编程助手。但很多人只用到了它的 30% 能力——只会按 Tab 接受补全。这篇文章帮你榨干它。 ## 快速上手 1. VS Code 扩展商店搜索 "GitHub Copilot" 安装 2. 用 GitHub 账号登录,个人版 $10/月(学生免费) 3. 打开任意代码文件,Copilot 会自动开始建议 ## 核心快捷键(必须记住) 快捷键| 功能 ---|--- Tab| 接受当前建议 Esc| 拒绝建议 Alt + ]| 下一个建议 Alt + [| 上一个建议 Ctrl + Enter| 打开 Copilot 面板,一次性看 10 个建议 Ctrl + I| 打开内联聊天(Chat in Editor) Ctrl + Shift + I| 打开 Copilot Chat 侧边栏 ## 上下文工程:让 AI 理解你的意图 Copilot 不是读心术。它从你当前文件和相关打开的文件中获取上下文。以下技巧显著提升建议质量: * **保持相关文件打开** — Copilot 会读取你当前打开的所有标签页。写前端组件时把类型定义文件也开着。 * **先写注释再写代码** — 用注释描述你要实现的功能,Copilot 的注释转代码能力非常强。 * **写好函数签名** — 函数名和参数名是对 AI 最直接的提示。 * **给好示例** — 在同一文件中先手写一两个正确的示例,后续补全质量明显提升。 ## Chat 功能:不只是补全 * **解释代码** — 选中代码 → Ctrl+Shift+I → "explain this" * **重构代码** — 选中 → "refactor this to use async/await" * **生成测试** — 选中函数 → "/tests" 自动生成单元测试 * **修复 Bug** — 选中报错代码 → "/fix" 自动诊断并修复 ## 常见陷阱 * **盲目信任** — Copilot 会写出看起来正确但有安全漏洞的代码,永远 review。 * **死循环接受** — 不要一直按 Tab,每接受一个建议后看一眼逻辑是否正确。 * **忽略旧 API** — Copilot 训练数据可能包含过时的库版本,遇到不认识的 API 先查文档。 ### 📖 相关推荐 * [Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战]() * [单元测试入门:从零到写出第一个可维护的测试]() * [REST API 设计最佳实践:写出让人愿意用的接口]() **See also:** [AI 编程助手对比 2026:Cursor vs Copilot vs Claude Code 怎么选](), [用 AI 辅助编程:从零到生产力](), [Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战](). --- ## Docker 30 分钟入门:从安装到第一个容器 URL: https://dingjiu1989-hue.github.io/tech/docker-quickstart.html Docker 是现代开发者的必备技能。这篇文章用最通俗的语言带你 30 分钟上手。 ## 为什么需要 Docker * **环境一致性** — "我电脑上能跑啊" 从此成为历史。开发、测试、生产环境完全一致。 * **快速部署** — 一条命令启动完整环境,不用装数据库、配环境变量。 * **资源隔离** — 每个项目独立运行,不互相干扰。 ## 核心概念三件套 概念| 比喻| 说明 ---|---|--- 镜像 (Image)| 系统安装盘| 只读模板,包含运行应用所需的一切 容器 (Container)| 运行中的虚拟机| 镜像的运行实例,相互隔离 Dockerfile| 安装说明书| 定义如何构建镜像的文本文件 ## 安装 Docker macOS 用户推荐 [OrbStack]()(轻量替代 Docker Desktop),或直接 `brew install docker`。Windows/Linux 用户去 docker.com 下载即可。 ## 第一个容器 # 拉取并运行 nginx docker run -d -p 8080:80 --name my-nginx nginx # 浏览器打开 http://localhost:8080 就能看到 nginx 欢迎页 ## 写一个 Dockerfile FROM python:3.12-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . EXPOSE 8000 CMD ["python", "app.py"] ## 常用命令速查 `docker ps`| 查看运行中的容器 ---|--- `docker images`| 查看本地镜像 `docker build -t name .`| 构建镜像 `docker exec -it name bash`| 进入容器 shell `docker-compose up -d`| 启动多容器应用 ## 下一步 掌握这些就可以开始在工作中使用 Docker 了。推荐下一步学习 docker-compose 多容器编排和 Docker Hub 镜像仓库。 ### 📖 相关推荐 * [Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战]() * [单元测试入门:从零到写出第一个可维护的测试]() * [REST API 设计最佳实践:写出让人愿意用的接口]() **See also:** [Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战](), [单元测试入门:从零到写出第一个可维护的测试](), [REST API 设计最佳实践:写出让人愿意用的接口](). --- ## VS Code 十大必备插件:让编码效率翻倍 URL: https://dingjiu1989-hue.github.io/tech/vscode-extensions.html VS Code 是目前最流行的代码编辑器没有之一。装对这 10 个插件,编码效率可以翻倍。 ## AI 编程类 * **GitHub Copilot** — AI 代码补全的开创者,支持行内补全、函数生成、注释转代码。付费($10/月),学生免费。 * **Codeium** — 免费的 AI 补全替代方案,速度比 Copilot 快,支持 70+ 语言,企业版才收费。 ## Git 可视化 * **GitLens** — 行级 Git Blame、文件历史、分支对比,免费版功能已很强。必装。 * **Git Graph** — 可视化 Git 提交树,鼠标点几下就能完成 checkout、merge、revert 操作。 ## 代码质量 * **Prettier** — 代码格式化工具,支持 JS/TS/CSS/HTML/JSON 等,保存时自动格式化,团队协作统一风格必备。 * **ESLint** — JavaScript/TypeScript 代码检查,实时标记潜在错误和风格问题。 ## 效率工具 * **Auto Rename Tag** — 修改 HTML/JSX 标签自动同步配对标签,小小的改动巨大提升体验。 * **Path Intellisense** — 输入文件路径时自动补全,引号和 import 语句必备。 * **Remote - SSH** — 微软官方出品,直接在 VS Code 里编辑远程服务器上的代码,免去 scp 和 vim 的痛苦。 * **Error Lens** — 把错误信息内联显示在代码行尾,不用鼠标悬停就能看到完整报错。 ## 经验之谈 插件不是越多越好——装太多会拖慢启动速度。这 10 个是我用过上百个插件后留下的"真必需品"。Copilot 或 Codeium 二选一即可,两个同时开会冲突。 ### 📖 相关推荐 * [macOS 效率工具推荐合集]() * [Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战]() * [单元测试入门:从零到写出第一个可维护的测试]() **See also:** [Git 常用命令速查表](), [10 款开发者必备的命令行工具(2026 版)](), [VS Code vs JetBrains vs Cursor:2026 年代码编辑器终极对比](). --- ## Git 常用命令速查表 URL: https://dingjiu1989-hue.github.io/tech/git-cheatsheet.html 日常开发中 Git 是最常用的版本控制工具。这里整理了高频命令,按场景分类,方便速查。 ## 分支管理 命令| 说明 ---|--- `git branch`| 查看本地分支 `git branch -r`| 查看远程分支 `git branch `| 创建新分支 `git checkout `| 切换分支 `git checkout -b `| 创建并切换到新分支 `git merge `| 合并指定分支到当前分支 `git branch -d `| 删除本地分支 `git push origin --delete `| 删除远程分支 ## 暂存与提交 命令| 说明 ---|--- `git status`| 查看工作区状态 `git add `| 添加文件到暂存区 `git add .`| 添加所有更改到暂存区 `git commit -m "msg"`| 提交暂存区内容 `git commit --amend`| 修改上一次提交 ## 撤销操作 命令| 说明 ---|--- `git restore `| 撤销工作区修改 `git restore --staged `| 取消暂存 `git reset --soft HEAD~1`| 撤销上次 commit,保留修改 `git reset --hard HEAD~1`| 撤销上次 commit,丢弃修改 `git revert `| 安全撤销某次提交(生成新 commit) ## 远程协作 命令| 说明 ---|--- `git remote -v`| 查看远程仓库地址 `git push`| 推送当前分支到远程 `git pull`| 拉取远程更新并合并 `git fetch`| 拉取远程更新但不合并 `git clone `| 克隆远程仓库 ## 日志与历史 命令| 说明 ---|--- `git log --oneline`| 查看简洁提交历史 `git log --graph --oneline`| 查看分支图 `git diff`| 查看未暂存的修改 `git diff --staged`| 查看已暂存的修改 ## 储藏 (Stash) 命令| 说明 ---|--- `git stash`| 暂存当前修改到储藏栈 `git stash pop`| 恢复最近一次储藏并删除 `git stash list`| 查看储藏列表 `git stash drop`| 删除最近一次储藏 ### 📖 相关推荐 * [Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战]() * [Linux 命令行入门:30 个最常用的命令]() * [单元测试入门:从零到写出第一个可维护的测试]() **See also:** [VS Code 十大必备插件:让编码效率翻倍](), [10 款开发者必备的命令行工具(2026 版)](), [Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战](). --- ## macOS 效率工具推荐合集 URL: https://dingjiu1989-hue.github.io/tech/macos-tools.html 一套好用的工具能让 Mac 工作效率翻倍。这里整理了我长期使用后筛选出的精品工具,涵盖各个高频场景。 ## 启动器与搜索 * **Raycast** — 免费且功能强大的启动器,替代 Spotlight。支持剪贴板历史、窗口管理、快捷搜索、插件扩展。比 Alfred 更现代,社区生态活跃。 * **Alfred** — 老牌启动器,Powerpack 付费后可自定义 Workflow。功能深度够,但界面略显老旧。 ## 窗口管理 * **Rectangle** — 开源免费,快捷键快速分屏。支持左右半屏、四分之一屏、全屏等布局。 * **Magnet** — 付费($8),拖拽窗口到边缘自动吸附分屏,操作直觉化。 ## 剪贴板管理 * **Maccy** — 开源免费,轻量级剪贴板管理器。菜单栏快捷访问,支持纯文本粘贴。 * **Paste** — 付费订阅,可视化剪贴板界面华丽,适合设计类工作。 ## 截图与录屏 * **CleanShot X** — 付费($29 一次性),截图标注、滚动截图、录屏、OCR 文字识别。功能最全。 * **Shottr** — 免费(基础功能),轻量截图工具,支持像素级放大镜和取色器。 ## 终端工具 * **iTerm2** — 老牌终端增强,分屏、热键窗口、Shell Integration。 * **Warp** — 现代化的 Rust 终端,AI 辅助命令,团队协作功能。 * **Homebrew** — macOS 必不可少的包管理器。`brew install ` 搞定一切。 ## 其他精品 * **IINA** — 开源视频播放器,界面优雅,支持所有格式。 * **Keka** — 免费解压工具,支持 7z、RAR、ZIP 等格式。 * **AppCleaner** — 彻底卸载应用并清理残留文件。 ### 📖 相关推荐 * [VS Code 十大必备插件:让编码效率翻倍]() * [Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战]() * [单元测试入门:从零到写出第一个可维护的测试]() **See also:** [Git 进阶:交互式 rebase、cherry-pick 和 bisect 实战](), [单元测试入门:从零到写出第一个可维护的测试](), [REST API 设计最佳实践:写出让人愿意用的接口](). --- ## Web 安全入门:每个开发者都应知道的 10 个安全实践 URL: https://dingjiu1989-hue.github.io/tech/web-security-basics.html "安全是运维的事"——这是 Web 开发中最危险的误解。实际上,**大多数安全漏洞都来自应用层代码** :没有校验的用户输入、硬编码的密钥、错误配置的 CORS。本文用最直白的语言讲清楚 10 个你明天就能用上的安全实践。 ## 1\. 永远不要信任用户输入(XSS 防御) 跨站脚本攻击(XSS)的原理很简单:攻击者在输入框里插入 JavaScript 代码,你的网站原封不动地把它显示给其他用户,然后代码就执行了。 **三种 XSS 类型** : * **存储型 XSS** :恶意脚本被存到数据库,每次有人访问页面都会执行。比如论坛帖子内容里插入了 script 标签。 * **反射型 XSS** :恶意脚本通过 URL 参数传入,服务端直接返回到页面。比如搜索结果的"你搜索了: