git-smart-updatelisted
Install: claude install-skill nicholyx/ai-skills
# Git 智能更新
智能更新 Git 仓库,同时保留本地修改。自动处理暂存-更新-还原循环,并智能解决合并冲突。
## 使用场景
当出现以下情况时使用此技能:
- 用户想更新/拉取代码,且有本地未提交的修改
- 用户说"更新代码"、"拉取最新"、"git pull 并保留我的修改"
- 用户提到更新分支(当前分支或所有分支)
- 你在 pull 操作前检测到未提交的修改
- 本地有已提交的代码,需要与远程同步
## 核心工作流程
### 步骤 1:分析当前状态
首先,了解当前的工作状态:
```bash
# 检查当前分支
git branch --show-current
# 检查未提交的本地修改
git status --porcelain
# 检查是否有 upstream 分支
git rev-parse --abbrev-ref --symbolic-full-name @{u}
# 检查本地是否有已提交但未推送的 commit
git log @{u}..HEAD --oneline
```
**判断点:**
- 无本地修改 → 直接进入更新流程
- 有未提交修改 → 进入暂存工作流
- 有本地 commit → 询问 rebase 还是 merge
- 无 upstream 分支 → 警告用户,询问处理方式
### 步骤 2:处理本地 Commit(如果存在)
检查本地是否有未推送的提交:
```bash
# 获取本地领先的 commit 数量
LOCAL_COMMITS=$(git log @{u}..HEAD --oneline | wc -l)
```
**如果有本地 commit(LOCAL_COMMITS > 0):**
询问用户选择合并策略:
```
检测到你有 {N} 个本地提交尚未推送到远程。
你希望如何与远程更新合并?
1. **Rebase(变基)** - 推荐
✓ 提交历史更清晰线性
✓ 避免不必要的合并提交
⚠️ 会重写本地提交历史
2. **Merge(合并)**
✓ 保留原始提交历史
✓ 更安全的合并方式
⚠️ 会产生一个合并提交
请选择:rebase / merge
```
记录用户选择(`use_rebase`),用于后续的 pull 操作。
### 步骤 3:暂存本地修改(如果需要)
如果有未提交的本地修改:
```bash
git stash push -m "更新前自动暂存 - $(date '+%Y-%m-%d %H:%M:%S')"
```
记录 stash hash 以便后续验证。
### 步骤 4:获取远程更新
**重要:无论更新当前分支还是所有分支,都先 fetch 所有远程信息**
```bash
# 获取所有远程分支的更新信息
# 这样即使断网,也可以切换和合并其他分支
git fetch --all
```
这步的好处:
- 所有远程分支信息缓存到本地 `refs/remotes/origin/`
- 断网后仍可查看其他分支状态、切换分支、合并分支
- 只下载引用信息,不下载完整代码,速度快
### 步骤 5:合并远程更新到本地
**根据用户选择的策略执行:**
**当前分支**(默认):
```bash
# 如果用户选择了 rebase
git rebase @{u}
# 如果用户选择了 merge 或未选择(默认)
git merge @{u}
```
**所有分支**(