safe-pulllisted
Install: claude install-skill toRolex/rolex-skills
# Safe Pull
安全拉取远程代码,使用 rebase 保持线性历史,自动暂存/恢复本地修改。
## 核心流程
```bash
# 1. 先看远程改了什么
git fetch && git log -p main..origin/main
# 2. 暂存本地修改
git stash
# 3. 用 rebase 而不是 merge(保持线性历史)
git pull --rebase
# 4. 恢复本地修改
git stash pop
```
## 完整流程
### 1. 检查远程变更
```bash
git fetch origin
git log --oneline <current-branch>..origin/<current-branch>
```
本地已是最新则直接结束。
### 2. 暂存本地修改
```bash
git status --short
git stash push -u -m "safe-pull: auto stash before rebase"
```
工作区干净则跳过。暂存失败则中止,报告原因。
### 3. Rebase 拉取
```bash
git pull --rebase origin <branch>
```
冲突时进入**冲突处理**子流程。网络失败重试一次,仍失败则中止。
### 4. 恢复本地修改
```bash
git stash pop
```
stash pop 冲突 → 保留 stash,列出冲突文件。空 stash → 跳过。
### 5. 推送(可选)
询问是否需要 `git push` 或 `git push --force-with-lease`。
## 冲突处理
1. `git diff --name-only --diff-filter=U` 列出冲突文件
2. 告知用户冲突内容,**不自动解决**
3. 用户解决后:`git rebase --continue`
4. 用户确认放弃:`git rebase --abort && git stash pop`
## 回滚
```bash
git rebase --abort 2>/dev/null
git stash list | grep "safe-pull:" && git stash pop
```
## 规则
- **禁止** `--no-verify`、`--no-gpg-sign`,**禁止** `git reset --hard` 在 dirty tree 时执行
- **禁止** 对 main/master 执行 `--force` push
- stash 用 `-u` 包含 untracked 文件
- 操作前告知当前分支和目标分支
## 分支场景
| 场景 | 目标分支 | 流程 |
|------|---------|------|
| 同步 main/develop | `origin/main` 或 `origin/develop` | 标准四步 |
| Feature 分支 rebase develop | `origin/develop` | 标准四步 + `--force-with-lease` push |
| 多分支同步 | 依次执行 | 每个分支独立走标准流程 |
## 完成标准
- 本地分支与远程同步,线性历史。
- 本地修改已恢复(或用户已知冲突待处理)。
- 如已推送,远程分支也已更新。