Files
shared/skills/spec-git-safety/SKILL.md
T
JefferyandClaude Opus 5 db492e6ba7 refactor(plugin 命名空間): plugin 更名 jsc-generic、hooks 只註冊自己擁有的 role
- 五份 manifest 的 name 由 jsc 改為 jsc-generic
- hooks/hooks.json 由合併超集改為只註冊 SessionStart(role_load)與 Stop(role_capture):worklog 的 hook 交還 jsc-doc
- hook 腳本搜尋路徑改指 jsc-generic
- role skill 更新 hooks 說明:改名後各 plugin 名稱獨立、互不覆蓋,不再需要三份同步;並註明不可再把別的 plugin 的 hook 寫進自己的 hooks.json
- skill 名稱不變(role、spec-*),指令引用改為 /jsc-generic: 前綴
- 版號 0.0.8 → 0.0.9

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-28 17:07:14 +08:00

3.0 KiB
Raw Blame History

name, description
name description
spec-git-safety JSC plugins 共用「Git 安全操作規範」:不破壞既有工作(未提交變更先提醒、絕不 reset --hard/checkout -f/clean)、git mv 保留歷史、develop → master 後備分支選擇、pull --ff-only、保守解衝突。當其他 skill 內文引用 spec-git-safety 或 /jsc-generic:spec-git-safety、或執行任何會操作 git 工作區/分支的 JSC skill 時載入此 skill。單獨被使用者呼叫時,直接說明本規範內容。

spec-git-safety — 共用 Git 安全操作規範

所有 JSC skills 操作 git 工作區、分支與遠端時,一律遵守以下規範。

不破壞既有工作

  • 改寫/覆寫/搬移檔案前,若工作區有未提交變更,先提醒使用者建議先 commit/備份。
  • 絕不 reset --hardcheckout -fclean,也不刪除使用者既有原始碼、不強制丟棄未提交變更。
  • 未提交變更導致切換分支/pull/建立分支失敗時,停止並回報,請使用者先處理;不可強制丟棄。
  • 目錄已存在且非預期內容(如非 git repo)→ 回報並略過,不刪除、不覆蓋

移動檔案優先 git mv

  • 搬移/改名檔案優先用 git mv 保留歷史。
  • 大小寫不敏感的檔案系統上需兩段式改名(先 git mv A A.tmpgit mv A.tmp a)。
  • 改名後必須同步更新專案內所有引用(設定檔、CI、文件連結),確保行為不變。

develop → master 後備分支

需要基準/後備分支時(當前分支不在遠端、clone 後選工作分支、PR 目標後備),依序:

  1. origin/develop 存在 → 用 develop
  2. 否則 origin/master 存在 → 用 master
  3. 兩者皆無 → 回報「找不到 develop/master」並停止或略過該項,不臆測其他分支

切換寫法:

git switch develop 2>/dev/null || git switch -c develop --track origin/develop
  • 切換後備分支屬不可忽略的狀態變更,需明確告知使用者已從原分支切換到哪個分支。
  • 批次更新既有 repo 時用 git pull --ff-only;無法快進(本地與遠端分歧)→ 回報需人工處理,自動 mergerebasereset。

保守解衝突

pullmergecherry-pick 發生衝突時:

  1. git status --porcelain 與衝突標記定位衝突檔。
  2. 讀取衝突檔脈絡,依專案現有行為與遠端變更做最小合理整合
  3. 可安全解決的衝突:編輯移除衝突標記,git add -- <檔案...> 標記已解決,完成 mergerebasecherry-pick 的必要步驟。
  4. 無法安全判斷的衝突:停止處理,列出檔案、原因與需要使用者決策的點;不要硬選任一邊。

建立分支不覆蓋

  • 新分支名稱需可讀且避免覆蓋既有分支;本地或遠端已存在同名分支時,換一個時間戳或短 hash,不可覆蓋。
  • 建立新分支屬不可忽略的狀態變更,需明確告知使用者原因與新分支名稱。