在 WebStorm 中使用 Git 时,"搁置更改"(Shelve Changes)和"隐藏更改"(Stash Changes)都是临时保存未提交更改的方法,但它们有重要区别:
主要区别
| 特性 | 搁置更改 (Shelve) | 隐藏更改 (Stash) |
|---|---|---|
| 所属系统 | IntelliJ IDEA 功能 | Git 原生功能 |
| 存储位置 | 存储在 IDEA 项目目录的 .idea/shelf 下 |
存储在 Git 的存储区中 (.git/refs/stash) |
| 可见范围 | 仅当前项目可见 | 所有使用同一仓库的开发者可见 |
| 分支关联 | 不与特定分支关联 | 与创建时的分支和提交关联 |
| 恢复灵活性 | 可选择恢复部分文件或更改 | 通常全量恢复 |
| 用途场景 | 临时保存不相关的更改 | 切换分支前保存当前工作 |
何时使用哪种方式
使用 搁置更改 (Shelve) 当:
- 你有一些半完成的、不相关的更改,想暂时保存但不提交
- 需要保留更改在本地,但不想影响当前工作区
- 想选择性地恢复部分更改
- 这些更改只与当前项目有关,不需要共享给团队
使用 隐藏更改 (Stash) 当:
- 需要切换分支但当前更改未完成不能提交
- 需要将临时更改与特定Git提交关联
- 可能需要与其他开发者共享这些临时更改
- 遵循严格的Git工作流程
操作对比
搁置更改 (Shelve) 操作流程
- 右键点击文件或变更列表 → "Git" → "Shelve Changes"
- 输入搁置名称和描述
- 恢复时:打开"Git"工具窗口 → "Shelf"标签 → 右键选择"Unshelve"
隐藏更改 (Stash) 操作流程
- 点击IDE顶部菜单 "Git" → "Stash Changes"
- 输入存储消息
- 恢复时:点击"Git" → "Unstash Changes" 或使用
git stash pop命令
高级区别
-
更改管理:
- Shelve 可以按变更列表(Changelist)分组搁置
- Stash 总是保存所有未提交的更改
-
版本控制:
- Shelve 有本地历史记录,可以查看不同版本的搁置
- Stash 是Git对象,可以通过reflog查找但管理不如Shelve方便
-
冲突处理:
- Unshelve时IDEA会提供更好的冲突解决界面
- Unstash时冲突需要手动解决
-
长期保存:
- Shelve 更改会一直保留直到手动删除
- Stash 更改可能会被Git垃圾回收清理(默认30天后)
选择哪种方式取决于你的具体需求,但通常对于个人临时保存,Shelve更灵活;对于团队协作或分支切换,Stash更符合Git工作流。








网友评论