← ClaudeAtlas

git-undolisted

撤销 git 操作的安全向导。当用户说「帮我撤销/我 commit 错了/怎么恢复/误删分支/push 错了/git 救命/git 怎么回退/我把改动搞丢了」时触发。
YuAICode/ai-skills · ★ 1 · Code & Development · score 74
Install: claude install-skill YuAICode/ai-skills
# git-undo — git 撤销安全向导 把用户用中文描述的"出了什么事",变成**安全的恢复命令 + 清晰解释 + 风险提示**。 能用非破坏性方式就不用破坏性;拿不准意图先问;reflog 是后悔药要善用。 ## 何时触发 - 用户说"帮我撤销"、"我 commit 错了"、"怎么恢复"、"误删分支"、"push 错了"、"git 救命" - 用户说"git 怎么回退"、"我把改动搞丢了"、"想反悔"、"提交错了" - 用户遇到 git 操作失误,不知道怎么恢复 ## 工作流 ### 1. 采集当前 git 状态 先跑 state.sh 了解现状,再结合用户描述判断: ```bash bash <skill>/bin/state.sh ``` state.sh 会输出(纯只读): - 当前分支名 - `git status -s`(工作区/暂存区状态) - 最近 5 条 `git log --oneline` - `git reflog` 最近 10 条 - 上游分支信息(有无、是否领先/落后) - 是否有未暂存改动、是否有未提交改动 ### 2. 确认用户意图(拿不准先问) 读完状态后,**先理解用户想达成什么目标**,再给命令。 常见误解:用户说"撤销 commit"可能是要: - 保留改动但取消提交(`--soft`) - 完全丢掉(`--hard`,破坏性) - 保留提交历史但反转内容(`git revert`) **意图不明时直接追问,不臆测。** ### 3. 按场景给���全恢复命令 #### 场景 A:误 commit,还没 push ```bash # 保留改动、取消提交(最安全,推荐) git reset --soft HEAD~1 # 取消提交并取消暂存(改动还在工作区) git reset HEAD~1 # ⚠️ 破坏性:取消提交 + 丢弃改动(不可恢复) git reset --hard HEAD~1 ``` > 建议:先问用户是否要保留改动。默认推荐 `--soft`。 #### 场景 B:想丢弃工作区的未提交改动 ```bash # 丢弃单个文件的改动 git restore <file> # 或(旧版 git) git checkout -- <file> # ⚠️ 破坏性:丢弃所有未暂存改动 git restore . # ⚠️ 破坏性:同时清掉未跟踪文件 git clean -fd ``` > 警告:工作区改动一旦丢弃无法找回,执行前建议 `git stash` 兜底。 #### 场景 C:误执行了 `reset --hard`,想找回丢失的提交 reflog 是后悔药: ```bash # 1. 查看 reflog 找到误操作前的 SHA git reflog # 2. 恢复到那个状态 git reset --hard <sha> # 或只切到那个提交建新分支 git branch recover-branch <sha> ``` > reflog 默认保留 90 天,所以大部分情况都能找回。 #### 场景 D:push 错了分支 ```bash # 非破坏性(推荐):在目标分支上 revert git revert <sha> git push # ⚠️ 破坏性(需上游配合,有协作者时极危险): git push --force-with-lease origin <branch> ``` > 强烈建议先用 `revert`。`pus