很多开发者都有过这种体验:一天下来代码写了不少,但到了晚上复盘时,却说不清今天到底完成了什么。如果再加上多任务并行、临时修 Bug、紧急支持线上问题,就更难梳理“今天的进度”了。
“今日进度”并不是一个玄学概念,它是由代码提交、任务状态、测试结果和阶段产出共同构成的。如果能够用一套规范流程来记录、统计和复盘每日进度,不仅能提升个人工作效率,还能让团队协作更加透明。
本文会从开发者的实际工作场景出发,介绍如何利用 Git、自动化脚本和看板工具来管理每日进度,并给出可直接复制的 Shell/Python 脚本,帮你在每天下班前自动生成进度日报。
1. 背景与核心概念
1.1 什么是“今日进度”
在软件开发工作中,“今日进度”通常包含以下几类信息:
- 完成了哪些功能开发。
- 修复了哪些 Bug。
- 完成了哪些代码评审。
- 进行了哪些技术调研或文档编写。
- 当前还有哪些任务处于阻塞状态。
这些信息看似琐碎,却是项目管理、迭代排期、个人绩效评估的重要依据。
不少开发者习惯于在晚上凭记忆写日报,这种方式的缺点是很容易遗漏细节。比如:
- 今天改了 5 个文件,但只记得“改了一个列表页”。
- 重构了某段逻辑,但没有对应的提交信息。
- 帮同事排查了一个问题,却忘了记录。
如果所有代码变更都通过 Git 管理,并且提交信息规范,那么“今日进度”就可以通过自动化方式提取,不需要靠大脑回忆。
1.2 为什么需要系统化记录每日进度
从个人角度,每日进度记录能帮助:
- 回顾一天的工作成果,发现时间分配问题。
- 在周报、月报中快速提取关键信息。
- 统计自己的代码产出量和质量趋势。
- 找到频繁阻塞自己的问题点。
从团队角度,系统化的进度记录能帮助:
- 让站会更有重点,避免无效沟通。
- 让项目经理更精准地评估迭代风险。
- 让代码评审有据可查。
- 让知识在团队内沉淀,而不是留在个人记忆中。
1.3 今日进度与 Git 提交的关系
Git 是当前最流行的版本控制工具。每一次git commit记录,本质上就是一次“进度快照”。
一次规范的提交信息,应该回答三个问题:
- 改了什么。
- 为什么改。
- 影响范围是什么。
如果团队里每个人都坚持规范化提交,那么 Git 历史就是一份高质量的项目日志。通过脚本按时间段筛选提交记录,就能自动生成“某一天、某个人、某个项目的进度报告”。
原始提交信息(不推荐): fix bug 规范化提交信息(推荐): fix(order): 修复订单列表页金额千分位丢失问题 - 问题原因:前端格式化函数未处理负数场景 - 修复方式:统一使用 formatMoney 方法 - 影响范围:订单列表页、订单详情页2. 环境准备与版本说明
在动手实践之前,需要先确认你的开发环境。以下配置以常见环境为例,具体版本请根据实际项目情况调整。
2.1 推荐环境
| 工具 | 说明 |
|---|---|
| 操作系统 | Windows 10/11、macOS、Linux 均可 |
| Git | 2.30 及以上 |
| Python | 3.8 及以上(用于生成日报脚本) |
| Bash | macOS/Linux 自带;Windows 可使用 Git Bash |
| 代码托管平台 | GitHub、GitLab、Gitee 等 |
| 项目管理工具 | Jira、Trello、飞书项目、禅道等 |
2.2 核对本地环境
打开终端,执行以下命令确认 Git 和 Python 是否可用。
git --version python --version如果未安装 Git,请先前往 Git 官网下载安装包。安装完成后,建议配置全局用户信息:
git config --global user.name "Your Name" git config --global user.email "your_email@example.com"2.3 准备示例项目
为了演示效果,可以创建一个简单的测试仓库:
mkdir today-progress-demo cd today-progress-demo git init创建文件app.py,写入一段简单代码:
def hello(name): return f"Hello, {name}" if __name__ == "__main__": print(hello("CSDN"))第一次提交:
git add app.py git commit -m "feat: 初始化示例项目"到这里,本地环境就准备好了。接下来我们进入正题。
3. 用 Git 记录今日进度的核心操作
3.1 提交信息规范
提交信息是进度的最小单元。建议使用社区通用的 Conventional Commits 规范。
基本格式:
<type>(<scope>): <subject> <body>常见 type 包括:
| type | 含义 |
|---|---|
| feat | 新功能 |
| fix | 修复 Bug |
| docs | 文档变更 |
| style | 格式调整 |
| refactor | 重构 |
| test | 测试相关 |
| chore | 构建、工具链等杂项 |
示例:
git commit -m "feat(login): 增加短信验证码登录能力" git commit -m "fix(cart): 修复购物车数量为负数时总价计算错误"提交信息越清晰,后续生成进度报告时越容易归类。
3.2 查看今日提交记录
Git 提供了强大的日志筛选功能。
如果要查看今天的所有提交:
git log --since="midnight" --pretty=format:"%h %an %s"如果要查看本周的提交:
git log --since="1 week ago" --pretty=format:"%h %an %s"还可以按作者筛选,适合查看某个同事最近的工作产出:
git log --since="midnight" --author="zhangsan" --pretty=format:"%h %s"3.3 查看今日文件变更统计
git diff可以统计新增和删除的代码行数。
查看自今天零点以来的工作区变更:
git diff --since="midnight" --stat查看某次提交的详细变更:
git show <commit-id> --stat3.4 查看当前工作区状态
在一天结束时,执行git status查看还有哪些文件未提交。
git status如果存在未提交的修改,说明今天的进度尚未完整记录。此时应该检查:
- 是代码未完成,不属于“完成进度”。
- 还是写完了忘记提交,需要补提交。
这里有一个判断标准:今日进度应优先记录“已完成并验证”的内容,而不是“写了但还没跑通”的代码。
4. 自动生成今日进度日报的实战脚本
手动执行 Git 命令虽然可行,但每天重复操作仍然繁琐。下面提供一个自动生成日报的脚本方案。
4.1 Shell 脚本:提取今日提交记录
创建一个文件daily-progress.sh:
#!/bin/bash # daily-progress.sh # 功能:提取当天 Git 提交记录,生成 Markdown 格式日报 # 用法:bash daily-progress.sh OUTPUT_FILE="daily-report.md" echo "# 今日进度日报 - $(date +%Y-%m-%d)" > "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" echo "## 今日提交" >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" # 获取今日提交记录 git log --since="midnight" --pretty=format:"- %s (%h)" >> "$OUTPUT_FILE" # 统计变更行数 echo "" >> "$OUTPUT_FILE" echo "## 变更统计" >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" git diff --shortstat "@{0.days.ago}" >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" echo "日报已生成:$OUTPUT_FILE"运行脚本:
bash daily-progress.sh预期输出文件内容类似:
# 今日进度日报 - 2025-01-15 ## 今日提交 - feat(login): 增加短信验证码登录能力 (a1b2c3d) - fix(cart): 修复购物车数量为负数时总价计算错误 (b2c3d4e) ## 变更统计 2 files changed, 48 insertions(+), 6 deletions(-)4.2 Python 脚本:从 Git 仓库采集进度数据
Shell 脚本适合快速输出,但如果需要更复杂的统计(如按类型分类、统计单文件修改量),建议使用 Python。
创建progress_report.py:
import subprocess import datetime from collections import defaultdict def run_git_command(cmd): """执行 Git 命令并返回输出""" result = subprocess.run(cmd, shell=True, capture_output=True, text=True, encoding="utf-8") return result.stdout.strip() def get_today_commits(author=""): """获取当天的提交记录""" author_filter = f"--author={author}" if author else "" cmd = f"git log --since=midnight {author_filter} --pretty=format:%h|%an|%s" output = run_git_command(cmd) commits = [] if output: for line in output.splitlines(): parts = line.split("|") if len(parts) == 3: commits.append({ "hash": parts[0], "author": parts[1], "subject": parts[2] }) return commits def classify_commit(subject): """根据提交信息前缀对提交分类""" prefix = subject.split(":", 1)[0].strip() type_map = { "feat": "功能开发", "fix": "缺陷修复", "docs": "文档更新", "refactor": "代码重构", "test": "测试", "style": "代码样式", "chore": "工程维护", } return type_map.get(prefix, "其他") def generate_report(author=""): """生成日报""" commits = get_today_commits(author) today = datetime.date.today().isoformat() lines = [] lines.append(f"# 今日进度日报 - {today}") lines.append("") lines.append(f"提交总数:{len(commits)}") lines.append("") # 按类型统计 type_stats = defaultdict(int) for commit in commits: category = classify_commit(commit["subject"]) type_stats[category] += 1 if type_stats: lines.append("## 分类统计") lines.append("") lines.append("| 分类 | 数量 |") lines.append("| --- | --- |") for category, count in type_stats.items(): lines.append(f"| {category} | {count} |") lines.append("") # 提交明细 lines.append("## 提交明细") lines.append("") for commit in commits: category = classify_commit(commit["subject"]) lines.append(f"- [{category}] {commit['subject']} ({commit['hash']})") report_text = "\n".join(lines) with open(f"daily-report-{today}.md", "w", encoding="utf-8") as f: f.write(report_text) print(report_text) print(f"\n报告已保存:daily-report-{today}.md") if __name__ == "__main__": generate_report()运行脚本:
python progress_report.py脚本执行后,会生成一个带分类统计的日报文件。
如果你想统计某个同事当天的提交量,可以修改调用方式:
generate_report(author="zhangsan")4.3 Windows PowerShell 方案
如果你的开发环境是 Windows 且不想安装 Python,也可以使用 PowerShell 脚本。
创建daily-progress.ps1:
$today = Get-Date -Format "yyyy-MM-dd" $outputFile = "daily-report-$today.md" "# 今日进度日报 - $today" | Out-File -FilePath $outputFile -Encoding utf8 "" | Out-File -FilePath $outputFile -Append -Encoding utf8 git log --since="midnight" --pretty=format:"- %s (%h)" | Out-File -FilePath $outputFile -Append -Encoding utf8 Write-Host "日报已生成:$outputFile"在 PowerShell 中执行:
.\daily-progress.ps1如果系统提示禁止执行脚本,可以用:
powershell -ExecutionPolicy Bypass -File .\daily-progress.ps15. 从“今日进度”到“团队进度”:看板与同步
5.1 在看板中更新今日进度
代码提交只是进度的一个维度。作为团队一员,还需要将进度同步到项目管理工具中。
以 Jira 为例,常见的今日进度更新动作包括:
- 将已完成任务移动到 “Done” 列。
- 将进行中的任务更新预估剩余时间。
- 在阻塞任务上添加评论,说明阻塞原因和期望解除时间。
- 拆分子任务,细化今天完成的具体工作。
对于使用飞书项目或禅道的团队,逻辑类似。关键是:看板状态必须和实际代码进度一致,否则看板就成了摆设。
5.2 站会汇报模板
站会上汇报“今日进度”时,建议按以下结构组织:
- 昨天完成了什么。
- 今天计划做什么。
- 遇到了什么阻塞。
示例:
昨天完成了订单列表页重构,新增了分页加载,提交了 3 个 commit; 今天计划完成订单详情页的缓存逻辑; 目前没有阻塞项。如果你已经生成了日报,可以直接拿着日报文件汇报,信息更完整。
5.3 进度可视化
如果团队希望更直观地看到进度,可以做一些简单的可视化:
- 用 Git 提交图展示每天提交频率。
- 用燃尽图展示迭代剩余工程量。
- 用柱状图统计每周提交次数。
这些可视化功能通常由 Jenkins、GitLab Insights、SonarQube 等工具提供,不需要额外开发。
6. 提交记录不规范导致的进度统计问题
6.1 提交信息太随意
现象:
git log --since="midnight" --pretty=format:"%s" 输出: fix update aaa问题分析:
- 无法判断提交涉及的功能模块。
- 无法统计功能开发与 Bug 修复的比例。
- 后续回溯需求变更时难以定位代码。
解决方案:
- 推行 Conventional Commits 规范。
- 在 Git 仓库根目录添加
commitlint校验规则。 - 在 CI 流程中增加提交信息检查步骤。
6.2 提交信息不规范但代码已完成
有些开发者习惯一次性提交大量代码,提交说明只写 “update” 或 “开发”。
这样做的后果是:
- 单个提交过大,Code Review 困难。
- 某个功能需要回滚时,无法精准定位。
- 自动生成日报时,所有提交都被归为“其他”。
解决思路:
- 一个功能一个提交。
- 一个 Bug 修复一个提交。
- 提交前检查
git diff,确认内容与提交说明一致。
6.3 未提交的代码导致进度遗漏
现象:
- 代码写完但忘了
git add。 - 修改在临时分支上,未合并到主分支。
- 本地提交未 push 到远程仓库。
这些都会导致日报脚本统计不到真实的今日进度。
排查步骤:
- 执行
git status查看未提交文件。 - 执行
git branch -vv查看本地分支与远程分支的同步状态。 - 执行
git log origin/master..HEAD查看未推送的提交。 - 补齐提交或推送操作后,重新生成日报。
6.4 跨天工作时提交时间异常
如果你的工作节奏经常跨越零点,例如凌晨 1 点才提交前一天的功能代码,那么按 “midnight” 过滤的脚本会把凌晨的提交归到第二天。
解决方案包括:
- 调整脚本的统计时间段,例如从凌晨 4 点作为“新的一天”起点。
- 或者手动在日报中说明凌晨提交的归属。
修改 Shell 脚本中的过滤条件即可:
git log --since="4 hours ago" --pretty=format:"%h %s"这种方式的优点是贴合实际作息,缺点是跨周、跨月时统计逻辑需要额外维护。
6.5 常见问题速查表
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 日报中没有提交记录 | 代码在未 push 的本地分支 | 先合并或推送,再重新生成 |
| 提交全部被归为“其他” | 提交说明没有按规范填写 | 补充 type 前缀,例如 feat/fix |
| 统计的变更行数为 0 | 使用了错误的 git diff 参数 | 检查 diff 的对比范围 |
| 生成脚本乱码 | 编码格式不统一 | 统一使用 UTF-8 编码 |
| Windows 下 Bash 脚本无法运行 | 未安装 Git Bash | 使用 Git Bash 或 PowerShell 版本 |
7. 记录每日进度的工程建议
7.1 建议一:提交信息规范化从今天开始
与其写两行字解释提交,不如在首次提交时就遵守规范。
推荐模板:
type(scope): subject body例如:
fix(payment): 修复退款金额精度丢失问题 退款金额计算涉及浮点数乘法,容易产生精度误差。 改为 Decimal 后验证通过,影响支付退款相关接口。7.2 建议二:每天结束前做一次“进度快照”
下班前 10 分钟,可以执行以下操作:
# 1. 查看今日提交 git log --since="midnight" --oneline # 2. 查看工作区状态 git status # 3. 查看未推送分支 git log origin/master..HEAD --oneline根据结果,决定是否补提交或同步看板。
7.3 建议三:用提交信息和日报反推工作量
当你连续一周生成日报后,可以回顾这些数据:
- 提交数量是否过于集中在某一天。
- 缺陷修复占比是否过高。
- 是否有大量时间消耗在非代码任务上。
这些都是优化工作节奏的重要依据。
7.4 建议四:重要进度需要补充描述
不是所有进度都能通过 Git 记录。比如:
- 和产品经理确认了需求边界。
- 完成了一个技术方案的调研。
- 帮助同事定位了一个环境问题。
这些内容可以在日报的“非代码进度”部分手动补充。建议在日报脚本中预留一个补充章节。
7.5 建议五:不要为了刷提交数量而碎提交
规范化提交并不等于“每个文件提交一次”。合理的提交粒度是:
- 单个提交能独立表达一个完整的变更点。
- 同事评审时能快速理解变更原因。
- 回滚时可以只回滚一个逻辑单元。
7.6 建议六:分支管理保持整洁
“今日进度”如果塞在多个长期未合并的分支里,统计时会非常混乱。
推荐做法:
- 每个功能分支尽量当天合并或推送到远程。
- 长期分支定期同步主分支,避免大量冲突。
- 不再使用的分支及时清理。
常用命令:
# 删除本地已合并的分支 git branch --merged | grep -v "\*" | xargs git branch -d # 删除远程已合并的分支 git push origin --delete <branch-name>7.7 建议七:权限与安全边界
在大型团队中,代码提交和分支合并通常受权限管理控制。修改 Git 历史或强制推送时,必须注意:
- 强制推送前确认目标分支是否属于共享分支。
- 不要在公共分支上随意 rebase 已经推送的提交。
- 涉及 release 分支的提交,应遵循团队变更流程。
8. 总结与学习路线
“今日进度”虽然听起来是一个时间概念,但在工程实践中,它完全可以被结构化、自动化和可追溯。
本文围绕每日进度管理,梳理了以下核心内容:
- 每日进度由代码提交、任务状态和阶段产出共同构成。
- 规范化 Git 提交信息是自动化生成日报的基础。
- 通过
git log和git diff可以快速提取当天提交记录。 - 使用 Shell、Python 或 PowerShell 脚本,可以自动生成 Markdown 日报。
- 看板状态需要与代码进度保持一致。
- 遇到提交信息不规范的问题时,应优先从规范和流程入手解决。
下一步,你可以从以下方向继续深入:
- 学习 Conventional Commits 完整规范,并在团队内落地。
- 研究 Git 钩子和 CI 工具,在提交时自动校验提交信息格式。
- 结合定时任务(cron 或 Windows 任务计划程序),让日报在每天固定时间自动生成。
- 将日报数据接入 BI 工具,分析个人和团队的长期开发效率。
如果你希望把这套方法用在团队中,建议先从一次提交信息规范培训开始,再逐步引入自动化脚本和看板同步机制。记录者、管理者、协作多方都能从中获得收益。