零基础入门Python11|Git实战:为任务管理器建立版本历史

📅 2026/8/20 12:37:06
零基础入门Python11|Git实战:为任务管理器建立版本历史
零基础入门Python11Git实战为任务管理器建立版本历史本篇图解程序执行顺序这张图对应代码的执行顺序。先说清输入、处理和输出再解释语法细节初学时不容易迷路。一、上一篇课后练习讲解任务优先级适合定义为字符串排序时再映射成数字fromdataclassesimportdataclassfromdatetimeimportdatedataclassclassTask:id:inttitle:strpriority:strmediumdue_date:str|NoneNonedone:boolFalse排序规则PRIORITY_ORDER{high:0,medium:1,low:2}defsorted_tasks(tasks):returnsorted(tasks,keylambdatask:(task.done,PRIORITY_ORDER.get(task.priority,99),task.id,),)Python依次比较元组中的值。False排在True前面因此未完成任务优先同一完成状态下再按优先级和编号排序。未知优先级映射为99排在最后。可执行验收答案把代码保存为priority_check.py后直接运行fromdataclassesimportdataclassdataclassclassTask:id:inttitle:strpriority:strmediumdone:boolFalseORDER{high:0,medium:1,low:2}defsorted_tasks(tasks:list[Task])-list[Task]:returnsorted(tasks,keylambdat:(t.done,ORDER.get(t.priority,99),t.id))tasks[Task(3,写文档,low),Task(1,修复登录,high),Task(2,运行测试,medium,True)]assert[task.idfortaskinsorted_tasks(tasks)][1,3,2]assert[task.idfortaskintasks][3,1,2]print([(task.id,task.priority,task.done)fortaskinsorted_tasks(tasks)])预期输出未完成的 high、low 依次在前已完成任务最后原列表顺序仍是 3、1、2。若priority为未知字符串ORDER.get(..., 99)会将它放到最后并保留任务不会让排序抛KeyError。二、本篇成果为任务管理器建立Git仓库完成初始化、忽略文件、三次有意义的提交、功能分支、差异查看和故障恢复。Git不是网盘而是能够解释“谁在什么时候为什么修改了什么”的版本历史。三、仓库、工作区、暂存区和提交工作区正在编辑的文件暂存区准备进入下一次提交的改动提交带说明的项目快照仓库保存全部提交和分支。进入任务管理器根目录git init git status初始化不会自动提交文件。先创建.gitignore.venv/ __pycache__/ *.pyc .pytest_cache/ tasks.json .env虚拟环境、缓存、用户数据和密钥不能提交。源码和依赖清单应提交。四、完成第一次提交git add.gitignore task_manager main.py tests git status git commit-mfeat: add command line task manageradd只放入暂存区commit才形成历史。提交信息使用“类型: 具体变化”不要只写“修改”“完成”。查看历史git log--oneline--decorate五、用小提交记录开发过程增加优先级模型后gitdiffgit add task_manager/models.py task_manager/service.py git commit-mfeat: support task priority增加对应测试后git add tests git commit-mtest: cover task priority ordering代码与测试分开提交并非强制但每次提交应聚焦一个能够说明的变化。六、分支隔离新功能gitswitch-c feature/due-date git branch在分支上实现截止日期然后提交git add.git commit-mfeat: add task due date回到主分支并合并gitswitchmain git merge feature/due-date如果初始分支名是master可先执行git branch-M main七、恢复错误改动只修改了文件但尚未暂存可查看差异gitdiff如果确定不要这次改动使用git restore task_manager/models.py已经暂存但未提交git restore--staged task_manager/models.py不要随意使用会丢失所有改动的强制重置命令。恢复前先用status和diff确认范围。查看某次提交内容git show HEAD git show HEAD~1八、真实开发流程每完成一个小功能git status确认改动文件git diff逐行检查运行pytestgit add只加入相关文件git commit写清变化git log确认历史。Git不会替代测试。它只能保存“当时的代码”不能证明代码正确。九、本篇验收在新目录复制任务管理器源码执行git init git branch-M main git add.git commit-mfeat: initialize task managergitswitch-c feature/priority git status验收要求.venv、tasks.json和.env不出现在提交中主分支至少有一次提交feature/priority分支能够独立修改git diff能看到未提交变化pytest通过后才能提交。十、课后练习在feature/priority分支修改任务优先级并提交故意修改一行标题但不提交使用git diff观察再用git restore恢复。最后把该分支合并到main并画出“工作区→暂存区→提交”的数据流。实战补充提交前检查清单每次 Git 提交前执行 status、diff 和测试。提交应描述一个可运行增量例如 feat: persist tasks而不是把密钥、虚拟环境和临时数据库一起提交。git status--short gitdiff--check python-m pytest-q git add app tests git commit-mfeat: add task persistence验收从干净目录 clone 后按照 README 创建环境并通过测试故意制造一个错误提交再用 git revert 恢复。课后练习给任务项目建立 feature 分支和发布 tag。本篇结束完整模块文件本节不是代码片段而是本篇结束时该模块的完整版本。请先备份旧文件再整体替换替换后重新运行本篇命令和测试。阅读时重点看本篇新增的函数、事务边界和错误处理未涉及的代码先不要自行删减。本篇完整示例git init git add . git commit -m feat: initialize project git switch -c feature/login git status