先读项目约束
让 Codex 读取 AGENTS.md、README、测试说明、部署说明。项目规则优先于个人习惯。
本手册把 Git 拆成可理解、可练习、可让 Codex 执行与复盘的工作流:先看清状态,再限定边界,最后用提交、分支、PR 和恢复工具把开发过程变得可控。
$ git status --short --branch
## feature/git-codex...origin/feature/git-codex
M tutorial.html
?? assets/diagram.svg
Git 不只是“保存历史”的工具。它更像一套工程显微镜:当前文件怎么变、哪些变更准备进入历史、历史如何分叉、远端是否同步,都能被精确观察。
文件的真实现场。Codex 修改代码、生成文档、运行格式化后,变化先出现在这里。
M src/app.ts下一次提交的候选内容。这里决定“哪些变化属于同一个语义单元”。
staged hunk已形成快照的历史。提交要小、清楚、可审阅、可回滚。
a1b2c3 fix: ...团队协作的公共坐标。PR、CI、review、发布通常围绕远端分支展开。
origin/main把命令按“观察、选择、记录、移动、协作、救援、诊断”分类后,Codex 才能被明确地指挥:该只读就只读,该分阶段提交就分阶段提交,该停下来确认就停下来确认。
建议先把左列变成肌肉记忆,再把右列交给 Codex 做高质量复盘。人负责判断边界,Codex 负责快速执行和解释。
| 任务类型 | 核心命令 | Codex 协作方式 | 常见风险 |
|---|---|---|---|
| 看清现场 | git status --short --branchgit diff --statgit log --oneline --decorate -5 |
让 Codex 先给“分支、改动、远端、风险”摘要表。 | 跳过状态检查,误把历史变更当成本次任务。 |
| 审阅变化 | git diffgit diff --cachedgit show --stat |
让 Codex 按文件解释 diff,并标出行为变化和测试影响。 | 只看文件名,不看实际行为变化。 |
| 选择提交边界 | git add -pgit restore --stagedgit commit -m |
要求 Codex 先列 staged / unstaged,然后只暂存本次任务内容。 | 把格式化、调试、生成物和功能改动混在一个提交。 |
| 创建任务分支 | git switch -c feature/namegit branch -vv |
让 Codex 解释分支从哪里切出、是否有 upstream。 | 在错误分支上开发,或基于陈旧 main 开发。 |
| 同步远端 | git fetch --prunegit pull --ff-onlygit push -u origin branch |
让 Codex 先比较本地与远端 ahead/behind,再执行同步。 | 盲目 pull 产生不必要 merge commit。 |
| 恢复与回滚 | git restoregit revertgit refloggit stash |
让 Codex 先给恢复方案对比,确认后再执行有破坏性的操作。 | 把 reset、clean、force push 当成万能撤销键。 |
| 定位回归 | git bisectgit blamegit log -S |
让 Codex 设计可重复测试脚本,再用 bisect 二分定位。 | 凭感觉猜出错提交,浪费时间且不可复现。 |
| 并行开发 | git worktree addgit worktree list |
让 Codex 在独立 worktree 中处理互不干扰的任务。 | 多个任务共享同一工作区,改动互相污染。 |
优秀的 Codex 指令不只是“改一下”。它应该给 Codex 一套可执行的边界:先读规则、再看 Git 状态、再改、再验证、最后解释提交范围。
可记作:规则 → 状态 → 边界 → 实作 → 验证 → 提交 → 复盘。这个循环尤其适合多文件改动、线上服务配置、数据库脚本和长期项目维护。
让 Codex 读取 AGENTS.md、README、测试说明、部署说明。项目规则优先于个人习惯。
运行 git status、git diff --stat、git branch -vv,先知道站在哪里。
明确哪些文件属于本次任务,哪些文件是用户已有改动或生成产物,避免混入。
让 Codex 每完成一个行为单元就运行相关测试或静态检查,减少大回滚。
提交前必须看 git diff --cached,必要时用 git add -p 精准暂存。
提交信息写“为什么”和“改了什么”,不要把排障流水账塞进标题。
用 git diff main...HEAD 看完整分支差异,确认没有带入无关文件。
最终报告包括改动摘要、验证命令、风险、未完成项。Git 是证据链,不只是存档。
下面四个练习覆盖日常最高频场景:选命令、拆提交、理解 merge/rebase、处理冲突。可以直接把生成的 Codex 指令复制到会话里使用。
练习内容是本地页面内模拟,不会修改任何仓库。真正执行前仍应让 Codex 汇报当前 Git 状态。
先只读,不改文件。目标是建立当前事实:分支、未提交变更、远端、最近提交、风险。
git status --short --branch git branch -vv git log --oneline --decorate -5 git diff --stat
勾选属于同一语义单元的文件,页面会生成建议命令。提交不是“把所有变化打包”,而是“把一个可审阅的意图记录下来”。
适合需要保留完整分支上下文的协作场景。历史图会出现 merge commit,审计友好,但线性较弱。
git fetch origin git switch feature/git-codex git merge origin/main
<<<<<<< HEADconst mode = "review";=======const mode = "ship";>>>>>>> feature/release
当两边都有业务含义时,不要机械选择一边。应理解两个分支的意图,写出第三个正确结果,再运行测试。
# 编辑冲突文件,移除冲突标记 git add src/config.ts git status --short npm test
恢复类命令要先判断“改动是否已经提交、是否已经推送、是否只是暂存、是否影响他人”。Codex 可以快速生成方案表,但涉及历史重写或删除文件时,必须先确认。
安全优先级:restore 局部恢复、revert 公开回滚、reflog 找回本地历史、reset --hard 与 clean -fdx 需要极高警惕。
| 问题 | 优先命令 | 说明 |
|---|---|---|
| 工作区改错,尚未暂存 | git restore path | 恢复单个文件到暂存区或 HEAD 对应状态。 |
| 已经暂存,但不想提交 | git restore --staged path | 只撤出暂存,不丢工作区修改。 |
| 提交了但未推送 | git reset --soft HEAD~1 | 保留修改,撤回提交。执行前确认分支未共享。 |
| 提交已推送,需要撤销 | git revert SHA | 生成反向提交,不改写公开历史。 |
| 分支或提交找不到 | git reflog | 查本地引用移动记录,再创建恢复分支。 |
| 想定位回归提交 | git bisect | 用自动化测试二分搜索坏提交。 |
勾选准备执行的行为,查看是否应让 Codex 停下来确认。
风险等级:低。可以继续,但仍应保留状态摘要。
这些模板的核心不是让 Codex “更听话”,而是让任务边界、验证方式和 Git 证据链更明确。复制后替换项目名、目标分支、测试命令即可。
建议每次复杂任务都加一句:不要改动与本任务无关的已有变更;如发现未预期变更,先报告。
目标不是把所有命令背下来,而是在真实任务中形成“先观察、再选择、再记录、再复盘”的稳定习惯。勾选状态会保存在当前浏览器。
推荐节奏:每天 20-30 分钟;每周做一次真实仓库复盘;每次让 Codex 输出 Git 状态表和风险表。
目标:一眼看懂当前仓库状态。
目标:理解分叉、同步和 PR 差异。
目标:误操作不慌,公开历史不乱改。
目标:把 Git 纳入每次 AI 开发闭环。
能回答这些问题,说明 Git 已经开始从“命令集合”变成“工程判断系统”。
git diff --cached?因为工作区和暂存区可能不是同一份内容。
通常优先使用 git revert。
revert 通过新提交表达反向修改,团队成员同步时更安全。git status --short --branch。