如何操作 Git stash 栈

GitGitBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Git stash 是一项强大的功能,它允许开发者临时保存未提交的更改,而无需创建完整的提交。本教程将探讨操作 Git stash 栈的综合技术,使程序员能够精确且高效地处理复杂的代码管理场景。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git(("Git")) -.-> git/SetupandConfigGroup(["Setup and Config"]) git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git/SetupandConfigGroup -.-> git/git("Show Version") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/DataManagementGroup -.-> git/stash("Save Changes Temporarily") git/DataManagementGroup -.-> git/restore("Revert Files") git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/checkout("Switch Branches") subgraph Lab Skills git/git -.-> lab-418100{{"如何操作 Git stash 栈"}} git/status -.-> lab-418100{{"如何操作 Git stash 栈"}} git/commit -.-> lab-418100{{"如何操作 Git stash 栈"}} git/stash -.-> lab-418100{{"如何操作 Git stash 栈"}} git/restore -.-> lab-418100{{"如何操作 Git stash 栈"}} git/branch -.-> lab-418100{{"如何操作 Git stash 栈"}} git/checkout -.-> lab-418100{{"如何操作 Git stash 栈"}} end

Git Stash 基础

什么是 Git Stash?

Git stash 是一项强大的功能,它允许开发者临时保存未提交的更改,而无需将其提交到仓库。它提供了一种便捷的方式来切换上下文或分支,同时保留你当前正在进行的修改。

为什么使用 Git Stash?

开发者通常在以下场景中使用 Git stash:

  • 在提交当前更改之前切换分支
  • 暂停当前工作以处理紧急任务
  • 清理工作目录而不丢失修改

基本的 Stash 命令

暂存更改

## 暂存当前修改
git stash

## 带描述性消息暂存
git stash save "Work in progress feature X"

列出暂存

## 列出所有暂存的更改
git stash list

应用暂存的更改

## 应用最新的暂存
git stash apply

## 应用特定的暂存
git stash apply stash@{n}

Stash 工作流程图

graph TD A[工作目录] -->|git stash| B[暂存栈] B -->|git stash apply| A B -->|git stash pop| C[恢复的更改]

Stash 管理选项

命令 描述 使用场景
git stash 保存当前更改 临时上下文切换
git stash pop 应用并移除暂存 恢复最新的暂存
git stash drop 移除一个暂存 丢弃不需要的暂存更改

关键注意事项

  • 暂存在你的仓库中是本地的
  • 暂存可以包括已暂存和未暂存的更改
  • 多个暂存可以以类似栈的结构进行管理

通过掌握 Git stash,使用 LabEx 的开发者可以提高工作流程效率,并保持更清晰的版本控制实践。

Stash 管理技术

高级 Stash 操作

部分暂存

开发者可以使用部分暂存技术来暂存特定的文件或更改:

## 暂存特定文件
git stash push path/to/file1 path/to/file2

## 交互式暂存(选择要暂存的代码块)
git stash save -p

创建和管理多个 Stash

## 创建多个 Stash
git stash save "Feature A development"
git stash save "Urgent bug fix"

## 列出所有 Stash
git stash list

Stash 操作策略

应用特定的 Stash

## 应用特定的 Stash 而不删除它
git stash apply stash@{1}

## 应用并删除特定的 Stash
git stash pop stash@{2}

Stash 管理工作流程

graph TD A[Stash 列表] -->|选择 Stash| B{Stash 操作} B -->|应用| C[恢复更改] B -->|删除| D[移除 Stash] B -->|创建| E[新的 Stash]

高级 Stash 技术

技术 命令 描述
部分暂存 git stash push -p 交互式选择更改
命名暂存 git stash save "描述" 添加有意义的上下文
分支暂存 git stash branch newbranch 从 Stash 创建分支

处理 Stash 冲突

## 从 Stash 创建一个新分支
git stash branch bugfix-branch stash@{0}

## 如果存在冲突则解决冲突
## 手动编辑冲突文件
git add.
git commit

最佳实践

  • 创建 Stash 时使用描述性消息
  • 定期清理旧的或不必要的 Stash
  • 理解 applypop 之间的区别

清理 Stash

## 删除特定的 Stash
git stash drop stash@{1}

## 清除所有 Stash
git stash clear

LabEx 建议掌握这些 Stash 管理技术,以改进开发工作流程和代码组织。

实用的 Stash 工作流程

常见开发场景

场景 1:开发过程中切换分支

## 当前正在进行的工作
git status

## 暂存当前更改
git stash save "未完成的功能开发"

## 切换到另一个分支
git checkout another - branch

## 之后返回并恢复工作
git checkout original - branch
git stash pop

场景 2:紧急热修复工作流程

graph TD A[工作分支] -->|紧急问题| B[暂存当前工作] B -->|创建热修复分支| C[开发修复] C -->|提交修复| D[合并到主分支] D -->|恢复暂存的工作| E[继续开发]

协作式 Stash 策略

团队协作工作流程

工作流程步骤 Git 命令 目的
暂存更改 git stash save 保留本地修改
创建功能分支 git checkout -b feature - branch 隔离开发
应用暂存的工作 git stash apply 恢复之前的工作

复杂的 Stash 处理

## 带包含/排除选项暂存
git stash push -m "部分工作" -- path/to/specific/files
git stash push -m "排除测试文件" --. ':!*.test.js'

高级 Stash 技术

Stash 检查与管理

## 显示特定 Stash 的内容
git stash show -p stash@{0}

## 从 Stash 创建一个分支
git stash branch recovery - branch stash@{1}

处理多个 Stash

graph LR A[Stash 栈] -->|列出| B[Stash 条目] B -->|选择| C[应用/弹出特定的 Stash] C -->|管理| D[删除/清除 Stashes]

工作流程最佳实践

  1. 使用描述性的 Stash 消息
  2. 定期清理不必要的 Stash
  3. 应用 Stash 之前了解上下文

Stash 清理

## 删除特定的 Stash
git stash drop stash@{2}

## 清除所有 Stash
git stash clear

实际工作流程示例

## 开始处理一个功能
git checkout -b feature - authentication

## 中途遇到紧急 bug
git stash save "未完成的认证功能"

## 切换到主分支
git checkout main

## 创建热修复分支
git checkout -b critical - security - fix

## 开发并提交修复
git commit -m "修复关键安全漏洞"

## 回到功能分支
git checkout feature - authentication

## 恢复暂存的工作
git stash pop

LabEx 建议实践这些工作流程,以提高开发效率并保持清晰的版本控制实践。

总结

通过掌握 Git stash 栈操作,开发者可以显著提升他们的版本控制工作流程。理解 stash 管理技术能在处理代码更改时提供灵活性,允许快速切换上下文,并确保在不同分支和场景下项目开发的干净与有序。