Skip to content

Stash 命令

Stash 管理相关的命令详解。

📋 命令概览

命令别名说明
gw stashgw s, gw st交互式管理 stash

💾 Stash 管理

基本用法

bash
gw stash
gw s
gw st

主界面

bash
$ gw s
💾 Stash 管理

 3 stash:

? 选择 stash:
 [0] main fix login bug (3 文件) 2 hours ago
  [1] develop add new feature (5 文件) 1 day ago
  [2] main WIP (1 文件) 3 days ago
  + 创建新 stash
  取消

📋 Stash 详情

选择一个 stash 后显示详细信息:

bash
Stash #0
分支: main
消息: fix login bug
时间: 2 hours ago
文件 (3):
 src/auth.ts
 src/login.ts
 tests/auth.test.ts
────────────────────────────────────────
? 操作:
 应用 (保留 stash)
  弹出 (应用并删除)
  创建分支
  查看差异
  删除
  返回列表
  取消

🔧 Stash 操作

应用 Stash

应用 (保留 stash)

  • 将 stash 的更改应用到当前工作区
  • 保留 stash,可以重复应用
  • 等同于 git stash apply

弹出 (应用并删除)

  • 将 stash 的更改应用到当前工作区
  • 删除该 stash
  • 等同于 git stash pop

创建分支

从 stash 创建新分支:

bash
? 操作: 创建分支

? 选择分支类型:
 Feature 分支
  Hotfix 分支

? 请输入 Story ID (可跳过): STASH-123
? 请输入描述: restore-login-fix

 分支创建成功: feature/20260111-STASH-123-restore-login-fix
 Stash 已应用到新分支
 Stash 已删除: stash@{0}

查看差异

显示 stash 包含的具体更改:

bash
? 操作: 查看差异

diff --git a/src/auth.ts b/src/auth.ts
index 1234567..abcdefg 100644
--- a/src/auth.ts
+++ b/src/auth.ts
@@ -10,6 +10,10 @@ export function login(username: string, password: string) {
   if (!username || !password) {
     throw new Error('用户名和密码不能为空');
   }
+  
+  // 添加输入验证
+  if (username.length < 3) {
+    throw new Error('用户名至少需要3个字符');
+  }
 }

按任意键返回...

删除 Stash

bash
? 操作: 删除

? 确认删除 stash "fix login bug"?



 Stash 已删除: stash@{0}

➕ 创建 Stash

基本创建

bash
? 选择 stash: + 创建新 stash

检测到以下更改:
  M src/auth.ts
  M src/login.ts
  ?? src/new-file.ts

? 输入 stash 消息: WIP: 重构登录逻辑

? 是否包含未跟踪的文件?
 是,包含所有文件
  否,仅已跟踪文件

 Stash 创建成功: stash@{0}

处理未跟踪文件

工具会智能检测未跟踪的新文件:

bash
检测到未跟踪的文件:
  ?? src/new-component.ts
  ?? tests/new-test.ts

? 是否一并 stash 这些新文件?
 是,包含新文件
  否,忽略新文件

🎯 使用场景

临时切换分支

bash
# 当前在 feature 分支开发,需要紧急修复 bug
gw s
# 选择 "创建新 stash"
# 输入消息: "WIP: 用户管理功能开发中"

# 切换到 main 分支修复 bug
git checkout main
gw h  # 创建 hotfix 分支

# 修复完成后,回到 feature 分支
git checkout feature/user-management
gw s  # 恢复之前的工作

实验性更改

bash
# 尝试新的实现方案
# ... 编写代码 ...

# 不确定是否要保留,先 stash
gw s
# 创建 stash: "实验: 新的数据处理方案"

# 尝试其他方案
# ... 编写代码 ...

# 对比两种方案
gw s
# 查看之前的 stash 差异

代码审查准备

bash
# 开发完成,准备提交前整理代码
gw s
# 创建 stash: "临时: 调试代码和注释"

# 清理代码,移除调试信息
# ... 整理代码 ...

# 提交干净的代码
gw c

# 如果需要,可以恢复调试代码
gw s
# 应用之前的 stash

🔄 与原生 Git 对比

原生 Git Stash

bash
# 原生命令
git stash list
git stash show stash@{0}
git stash apply stash@{0}
git stash pop stash@{0}
git stash drop stash@{0}
git stash branch new-branch stash@{0}

输出难以阅读:

bash
$ git stash list
stash@{0}: WIP on main: 1234567 fix login bug
stash@{1}: WIP on develop: abcdefg add new feature
stash@{2}: WIP on main: 7890123 work in progress

Git Workflow Stash

bash
# 统一命令
gw s

清晰的交互界面:

bash
 3 stash:

? 选择 stash:
 [0] main fix login bug (3 文件) 2 hours ago
  [1] develop add new feature (5 文件) 1 day ago
  [2] main WIP (1 文件) 3 days ago

🚀 最佳实践

Stash 命名规范

推荐格式:

WIP: 功能描述
实验: 尝试内容
临时: 临时更改说明
调试: 调试相关更改

示例:

WIP: 用户权限管理功能
实验: 使用 Redis 缓存
临时: 添加调试日志
调试: 修复登录问题

定期清理

  1. 及时应用 - 完成工作后及时应用 stash
  2. 删除无用 - 定期删除不再需要的 stash
  3. 转为分支 - 长期保留的更改考虑创建分支

团队协作

  1. 不要依赖 - stash 是本地的,不要依赖它进行团队协作
  2. 及时提交 - 重要更改应该提交而不是 stash
  3. 清晰命名 - 使用清晰的 stash 消息

工作流集成

bash
# 1. 开发过程中临时保存
gw s  # 创建 stash

# 2. 处理其他任务
# ... 其他工作 ...

# 3. 恢复工作
gw s  # 应用 stash

# 4. 完成开发
gw c  # 提交代码

# 5. 清理 stash
gw s  # 删除不需要的 stash

Released under the MIT License.