Skip to content

feat: 支持 --commit 多哈希合并审查#8

Open
huanxue318 wants to merge 1 commit into
alibaba:mainfrom
huanxue318:feat/multi-commit-review
Open

feat: 支持 --commit 多哈希合并审查#8
huanxue318 wants to merge 1 commit into
alibaba:mainfrom
huanxue318:feat/multi-commit-review

Conversation

@huanxue318
Copy link
Copy Markdown

关联 Issue

Closes #7

使用场景

当修复某个问题时,可能一次没有 commit 完全,期间又有其他人 commit 了,因此需要对个人的多次 commit 进行合并审查。

# 之前:只能审查单个 commit
ocr review --commit abc123

# 现在:支持合并审查多个 commit
ocr review --commit abc123,def456

实现方案

采用纯 diff 合并方式,保持项目只做只读 git 操作的设计原则:

  1. 对每个 commit 分别执行 git show,解析为 []model.Diff
  2. 按文件路径合并:同一文件在多个 commit 中的变更进行 diff 文本拼接和增删行数累加
  3. 不同文件保持独立,直接透传

向后兼容

--commit abc123(单个哈希)行为完全不变,只有传入逗号分隔的多个哈希时才走新的合并路径。

主要改动

文件 类型 说明
internal/diff/merge.go 新增 MergeDiffs 多 commit diff 合并逻辑
internal/diff/merge_test.go 新增 8 个单元测试覆盖各种合并场景
internal/diff/git.go 修改 新增 ModeMultiCommitNewMultiCommitProvidergetMultiCommitDiff
internal/agent/agent.go 修改 loadDiffs 支持逗号分隔 commit 路由到 MultiCommitProvider
cmd/opencodereview/review_cmd.go 修改 FileReader.Ref 使用最后一个 commit 哈希
cmd/opencodereview/flags.go 修改 更新 --commit 用法说明
cmd/testdiff/main.go 修改 测试工具支持多 commit
README.md / README.zh-CN.md 修改 更新使用说明和示例
NPM-README.md 修改 更新使用说明
SKILL.md 修改 更新参数说明和调用模式
.claude/commands/ / plugins/ 修改 更新命令说明

测试

单元测试

=== RUN   TestMergeDiffs_Empty
--- PASS
=== RUN   TestMergeDiffs_SingleSet
--- PASS
=== RUN   TestMergeDiffs_DisjointFiles
--- PASS
=== RUN   TestMergeDiffs_SameFileAcrossCommits
--- PASS
=== RUN   TestMergeDiffs_NewThenModify
--- PASS
=== RUN   TestMergeDiffs_DeletedFile
--- PASS
=== RUN   TestMergeDiffs_BinaryFile
--- PASS
=== RUN   TestMergeDiffs_Mixed
--- PASS

端到端测试

使用 testdiff 工具在本仓库验证:

# 单个 commit(向后兼容)
go run ./cmd/testdiff -commit e6bac87 -summary
# 输出:1 file(s), +1/-1 lines

# 多个 commit 合并审查(同文件)
go run ./cmd/testdiff -commit e6bac87,8b87a45 -summary
# 输出:1 file(s), +2/-2 lines(insertions/deletions 正确累加)

# 多个 commit 合并审查(不同文件)
go run ./cmd/testdiff -commit 5f4e5a2,9a6a87b -summary
# 输出:7 file(s), +230/-0 lines

支持通过逗号分隔的多个 commit 哈希进行合并审查,适用于个人多次
提交之间夹杂他人提交的场景。

主要改动:
- 新增 internal/diff/merge.go:实现 MergeDiffs 多 commit diff 合并逻辑
- 新增 internal/diff/merge_test.go:合并逻辑单元测试
- internal/diff/git.go:新增 ModeMultiCommit、NewMultiCommitProvider、
  getMultiCommitDiff 方法
- internal/agent/agent.go:loadDiffs 支持逗号分隔 commit 路由到
  MultiCommitProvider
- cmd/opencodereview/review_cmd.go:FileReader.Ref 使用最后一个
  commit 哈希
- cmd/opencodereview/flags.go:更新 --commit 用法说明
- cmd/testdiff/main.go:测试工具支持多 commit
- 更新 README.md、README.zh-CN.md、NPM-README.md 使用说明
- 更新 SKILL.md、.claude/commands、plugins/commands 配套文档

用法:ocr review --commit abc123,def456
@CLAassistant
Copy link
Copy Markdown

CLAassistant commented May 29, 2026

CLA assistant check
All committers have signed the CLA.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: 支持 --commit 多哈希合并审查

2 participants