-
Notifications
You must be signed in to change notification settings - Fork 72
Closed
Labels
Description
[具体描述] branch -d 具体功能描述
Git 的 -d 选项会在删除分支前检查该分支是否已完全合并到当前 HEAD。如果分支包含
未合并的提交,-d 会拒绝删除并提示用户使用 -D 强制删除。
安全删除的特点:
- 检查分支是否已合并:通过遍历提交图判断分支的所有提交是否都可以从
当前 HEAD 到达。 - 防止数据丢失:拒绝删除包含未合并工作的分支,避免意外丢失代码。
- 提供明确提示:告知用户分支未合并,并建议使用 -D 强制删除。
libra branch -d merged-branch→ 成功删除已合并分支libra branch -d unmerged-branch→ 拒绝删除并提示错误libra branch -D any-branch→ 强制删除(已有实现)
[实现方案] branch -d 实现方案描述
-
在 BranchArgs 结构体中使用已存在的 delete_safe 字段(对应 -d 参数),
通过 clap 库的 Parser trait 解析命令行参数。 -
在 execute 函数中添加 delete_safe 的处理分支,并且使用 Rust 惯用的
if let Some(name) = args.delete_safe模式替代is_some() + unwrap()。 -
实现 delete_branch_safe 函数,包含完整的合并检查逻辑:
- 检查分支是否存在
- 检查是否尝试删除当前分支
- 获取 HEAD 和待删除分支的所有可达提交(使用 log::get_reachable_commits)
- 使用 HashSet 检查分支的所有提交是否都在 HEAD 的历史中
- 如果未完全合并,输出错误信息并建议使用 -D
- 如果已合并,执行删除并显示确认信息
-
编写集成测试 test_branch_delete_safe,覆盖两个场景:
- 场景 1:创建未合并的 feature 分支,验证 -d 拒绝删除
- 场景 2:将 master 快进到 feature 提交后,验证 -d 成功删除
- 同时验证所有现有的 8 个 branch 测试仍然通过
-
更新 README.md 兼容性表格,将 branch -d 从 ⛔ (P1) 更新为 ✅。
[测试验证]
- 所有 8 个 branch 相关测试通过 ✅
- 新增的 test_branch_delete_safe 测试通过 ✅
- 编译无警告(仅有预存在的 3 个 unused import 警告)
[技术细节]
- 采用模式匹配
if let处理 Option 类型,避免不安全的 unwrap - 遵循项目现有的代码风格和命名约定
Reactions are currently unavailable