git-checkpoint
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseGit Checkpoint (Bộ nhớ Undo không tốn token)
Git Checkpoint(无需消耗token的撤销记忆库)
Branch theo từng change (làm TRƯỚC khi bắt đầu code, ngay khi có change từ /opsx:new
//opsx:propose
)
/opsx:new/opsx:propose为每个变更创建分支(开始编码前执行,在通过/opsx:new
//opsx:propose
生成变更后立即执行)
/opsx:new/opsx:proposeKhông code thẳng trên . Ngay khi 1 change được tạo (sau hoặc , trước khi vào ):
main/opsx:new/opsx:proposeflutter-coding- Kiểm tra đang ở branch nào: .
git branch --show-current - Nếu đang ở (hoặc branch chính khác) → tạo branch mới đặt tên theo change:
main(lấygit checkout -b change/<change-name>đúng từ tên thư mục<change-name>).openspec/changes/<change-name>/ - Nếu đã đang ở đúng branch từ trước (ví dụ resume qua
change/<change-name>ở session mới) → không tạo lại, dùng luôn./opsx:continue - Toàn bộ commit theo task (mục dưới) đều nằm trên branch này, KHÔNG merge vào cho đến khi
mainchạy xong./opsx:archive
Khi hoàn tất change (sau bước "Hoàn tất change" bên dưới, đã archive xong):
bash
git checkout main
git merge change/<change-name>
git branch -d change/<change-name>Chỉ merge khi đã pass và đã chạy xong - không merge nửa chừng.
/opsx:verify/opsx:archiveNếu đang làm dở 1 change mà cần dừng để việc khác gấp: không cần làm gì thêm, vẫn sạch vì code đang nằm trên branch riêng. Quay lại sau bằng + .
maingit checkout change/<change-name>/opsx:continue不要直接在分支上编码。在生成一个变更后(执行或之后,进入之前):
main/opsx:new/opsx:proposeflutter-coding- 检查当前所在分支:。
git branch --show-current - 如果当前处于分支(或其他主分支)→ 创建以变更命名的新分支:
main(从git checkout -b change/<change-name>目录名中获取正确的openspec/changes/<change-name>/)。<change-name> - 如果之前已处于正确的分支(例如在新会话中通过
change/<change-name>恢复工作)→ 无需重新创建,直接使用该分支。/opsx:continue - 所有任务相关的提交(见下方章节)都将在此分支上进行,直到执行完成后才可合并到
/opsx:archive分支。main
完成变更后(在下方“完成变更”步骤之后,已完成归档):
bash
git checkout main
git merge change/<change-name>
git branch -d change/<change-name>仅在通过且执行完成后才可合并——请勿中途合并。
/opsx:verify/opsx:archive**如果正在处理一个变更但需要暂停以处理紧急事务:**无需额外操作,分支仍保持干净,因为代码都在独立分支上。之后可通过 + 恢复工作。
maingit checkout change/<change-name>/opsx:continueCommit theo từng task, và hoàn tất change khi xong hết (luồng bình thường)
按任务提交,完成所有任务后结束变更(常规流程)
Commit từng task (trong lúc đang chạy, sau mỗi task pass + nếu có UI):
/opsx:applymcp-loopui-checkpointgit add -A- Commit message ngắn theo task vừa xong, ví dụ .
feat(order): thêm màn hình đặt hàng trà sữa - Không commit khi task đó vẫn còn lỗi từ chưa pass, hoặc user chưa xác nhận UI ở
mcp-loop(nếu task có UI).ui-checkpoint
Checkpoint giữa chừng (tùy chọn): có thể gọi sau vài task để merge sớm delta spec vào spec chính, không cần chờ đến khi xong hết .
/opsx:synctasks.mdHoàn tất change (sau khi pass):
/opsx:verify- Đảm bảo đã commit hết các task còn lại.
- Gọi (nếu chưa sync lần nào) rồi
/opsx:syncđể merge delta spec vào/opsx:archivechính thức và chuyển change vàoopenspec/specs/. Đây là bước OpenSpec quản lý, KHÔNG tự chạy rawchanges/archive/qua bash để thay thế.openspec archive - Commit cuối cùng ghi nhận archive (nếu OpenSpec tạo thay đổi file cần commit thêm sau archive).
按任务提交(在执行过程中,每个通过的任务完成后提交;若涉及UI,则需在之后提交):
/opsx:applymcp-loopui-checkpointgit add -A- 根据刚完成的任务编写简短的提交信息,例如。
feat(order): 新增奶茶下单页面 - 如果任务未通过仍存在错误,或涉及UI但用户未在
mcp-loop确认,则请勿提交。ui-checkpoint
**中途检查点(可选):**可在完成几个任务后调用,提前将增量规范合并到主规范中,无需等到全部完成。
/opsx:synctasks.md完成变更(通过后):
/opsx:verify- 确保所有剩余任务均已提交。
- 调用(若从未同步过),然后调用
/opsx:sync,将增量规范正式合并到/opsx:archive中,并将变更移至openspec/specs/。此步骤由OpenSpec管理,请勿通过bash直接执行原始的changes/archive/命令替代。openspec archive - 最后一次提交以记录归档操作(若归档后OpenSpec生成了需要额外提交的文件变更)。
Xử lý "Undo / Quay lại"
处理“撤销/回退”请求
Khi user nói kiểu: "Bỏ tính năng Login đi", "Quay lại lúc chưa có Cart", "Undo cái vừa làm":
- Không đọc lại code để tự xóa thủ công. Chạy để tìm commit ngay trước khi thêm tính năng cần bỏ.
git log --oneline - Xác nhận với user (ngắn gọn) hash/commit message tìm được đúng là điểm cần quay lại chưa, tránh reset nhầm.
- Thực hiện:
- Nếu muốn bỏ hẳn thay đổi chưa commit hoặc mới nhất: .
git reset --hard <hash> - Nếu muốn giữ lịch sử (an toàn hơn, khuyến nghị mặc định): hoặc tạo branch mới từ hash cũ thay vì
git revert <hash>phá lịch sử.reset --hard
- Nếu muốn bỏ hẳn thay đổi chưa commit hoặc mới nhất:
- Sau khi reset/revert, chạy lại một lần để xác nhận app vẫn chạy được ở trạng thái vừa quay lại.
mcp-loop/SKILL.md - Nếu change chưa được archive (còn nằm trong ), xóa/hủy luôn thư mục change đó thay vì chỉnh sửa spec đã archive. Nếu change ĐÃ archive rồi (đã merge vào
openspec/changes/<change-name>/), tạo 1 change mới kiểu "revert" để đảo ngược phần spec đó cho đúng quy trình OpenSpec, không sửa tay trực tiếp vàoopenspec/specs/đã archive.specs/
当用户提出类似:“移除登录功能”、“回退到还没有购物车的状态”、“撤销刚做的操作” 这类请求时:
- 请勿手动阅读代码进行删除。执行查找添加该功能之前的提交记录。
git log --oneline - 简短确认用户找到的提交哈希/提交信息是否为正确的回退点,避免误重置。
- 执行操作:
- 如果想要完全丢弃未提交或最新的变更:。
git reset --hard <hash> - 如果想要保留历史记录(更安全,推荐默认使用):,或从旧哈希创建新分支,而非使用
git revert <hash>破坏历史记录。reset --hard
- 如果想要完全丢弃未提交或最新的变更:
- 重置/撤销后,重新执行一次,确认应用在回退后的状态仍可正常运行。
mcp-loop/SKILL.md - 如果变更尚未归档(仍位于),直接删除/取消该变更目录,而非修改已归档的规范。如果变更已归档(已合并到
openspec/changes/<change-name>/),则创建一个“撤销”类型的新变更,按照OpenSpec流程反转该部分规范,请勿直接手动修改已归档的openspec/specs/目录。specs/
Lưu ý an toàn
安全注意事项
- Mặc định ưu tiên /branch mới hơn
git revertđể không mất lịch sử vĩnh viễn, trừ khi user nói rõ muốn xóa hẳn.git reset --hard - Không tự động push lên remote trừ khi user yêu cầu - checkpoint là local trước.
- Nếu working tree đang dirty (có thay đổi chưa commit ngoài luồng) trước khi reset, cảnh báo user trước khi thực hiện, tránh mất code chưa lưu ngoài ý muốn.
- 默认优先使用/新分支,而非
git revert,避免永久丢失历史记录,除非用户明确要求完全删除。git reset --hard - 除非用户要求,否则请勿自动推送到远程仓库——检查点先在本地执行。
- 如果重置前工作区存在未提交的变更(流程外的修改),请先警告用户,避免意外丢失未保存的代码。