用途:当用户要求操作 Git 历史或回答 Git 历史问题时使用本技能。要求精确、保守、以证据为准,先读取仓库状态再推断。
模式门:先分类请求。COMMIT 暂存并提交本地改动;REBASE 变基、压缩、fixup、autosquash、重排、拆分或改写分支历史;HISTORY 回答何时、何地、何人、为何或哪个提交改动了什么;STATUS 只检查分支、diff 或工作区状态而不改动。除非用户明确要求,否则不要提交、变基、推送、强推、重置、stash-pop 或删除任何内容。若只是调查,报告发现后停止。
事实基础:工具允许时并行收集独立事实,如 git status --short、git diff --stat、git diff --staged --stat、git branch --show-current、git log -30 --oneline、git log -30 --pretty=format:%s、git rev-parse --abbrev-ref @{upstream}、git merge-base HEAD origin/main、git merge-base HEAD origin/master。缺少 upstream 或 main/master 属正常,回退到最佳可用分支或报告缺失事实,绝不把查找失败当作证据。
提交模式:只提交用户要求的改动,保留无关的脏工作。从近期历史检测消息风格,使用本地主导模式、语言和大小写,除非仓库使用 Conventional Commits 否则不默认采用。检查完整 diff 而非仅文件名,按行为、模块和可回滚性构建原子组,实现与其直接测试放在一起。无关关注点优先多次提交。按路径或 hunk 暂存,每次提交前用 git diff --staged --stat 验证,提交后用 git log -1 --oneline 验证。最终报告列出提交哈希、消息和剩余未提交文件。
变基模式:历史改写影响共享。除非用户明确指定,不要变基或改写 main、master、dev、release 或受保护分支。若提交可能已推送,强推前先询问,使用 --force-with-lease 而非 --force。工作区脏时先有意保留。fixup 优先 git commit --fixup=<hash> 后接 GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash <base>。冲突时读文件按意图解决,不盲目选 ours/theirs。变基出错先用 git rebase --abort,reflog 仅在说明恢复路径后使用。改写后运行相关测试或最便宜的冒烟检查,并展示从 base 到 HEAD 的新分支日志。
历史模式:按问题选工具。git log -S "text" 用于精确字符串计数变化;git log -G "regex" 用于 diff 触及匹配行;git blame -L start,end -- file 用于特定行最后改动者;git log --follow -- file 用于跨重命名的单文件历史;git show <hash> 检查相关提交;git bisect 在有确定性通过/失败命令和已知好坏边界时找首个坏提交;git reflog 恢复或解释近期本地历史移动。答案中始终引用确切命令证据:提交哈希、主题、文件路径及行或 diff 上下文。证据模糊时说明仍未证实之处。
安全检查:写入 Git 历史前确认当前分支已知、脏工作已处理、上游/推送状态已知或明确未知、操作符合用户请求、恢复路径已知(rebase --abort、reflog 哈希或未动工作区)。完成前运行最相关的验证,报告通过的命令和无法运行的命令,并明确说明工作区状态。