如何临时保存 Git 进行中的工作

GitGitBeginner
立即练习

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

简介

Git stash 是一项强大的功能,它允许开发者临时保存未提交的更改,而无需创建完整的提交。本教程将探讨各种贮藏技术,帮助程序员有效地管理他们正在进行的工作,在 Git 仓库中对代码修改提供灵活性和控制权。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) 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/checkout("Switch Branches") subgraph Lab Skills git/status -.-> lab-418152{{"如何临时保存 Git 进行中的工作"}} git/commit -.-> lab-418152{{"如何临时保存 Git 进行中的工作"}} git/stash -.-> lab-418152{{"如何临时保存 Git 进行中的工作"}} git/restore -.-> lab-418152{{"如何临时保存 Git 进行中的工作"}} git/checkout -.-> lab-418152{{"如何临时保存 Git 进行中的工作"}} end

Git Stash 基础

什么是 Git Stash?

Git stash 是一项强大的功能,它允许开发者临时保存未提交的更改,而无需进行完整的提交。当你需要切换分支或拉取更新,但还未准备好提交当前工作时,它特别有用。

为什么使用 Git Stash?

开发者在以下几种场景中使用 stash:

  • 切换到有未保存更改的分支
  • 清理工作目录
  • 暂停当前工作以处理紧急任务

基本的 Stash 命令

保存进行中的工作

## 基本的 stash 命令
git stash

## 使用描述性消息进行 stash
git stash save "Work in progress: feature X"

查看已贮藏的更改

## 列出所有已贮藏的更改
git stash list

## 显示最新贮藏的详细信息
git stash show

Stash 工作流程示例

graph TD A[开始工作] --> B{需要切换分支吗?} B -->|是| C[git stash] C --> D[切换分支] D --> E[处理其他任务] B -->|否| F[继续工作]

关键的 Stash 特性

命令 目的 行为
git stash 保存更改 保存当前修改
git stash pop 应用并移除贮藏 恢复最新的贮藏
git stash apply 应用贮藏但不移除 将贮藏保留在贮藏列表中

最佳实践

  • 贮藏时使用描述性消息
  • 定期清理贮藏列表
  • 理解 popapply 之间的区别

通过掌握 Git stash,开发者可以更灵活地工作,并保持干净、有条理的工作流程。LabEx 建议练习这些命令,以熟练管理进行中的工作。

贮藏管理

全面的贮藏操作

应用和移除贮藏

## 应用最新的贮藏并将其从贮藏列表中移除
git stash pop

## 应用特定的贮藏但不移除它
git stash apply stash@{n}

## 应用最新的贮藏
git stash apply

管理多个贮藏

列出贮藏

## 显示所有已贮藏的更改
git stash list

详细的贮藏工作流程

graph TD A[创建多个贮藏] --> B[列出贮藏] B --> C{选择要应用的贮藏} C --> D[应用特定的贮藏] D --> E[管理贮藏列表]

高级贮藏管理

贮藏操作表

命令 功能 行为
git stash drop 移除特定的贮藏 删除一个贮藏而不应用它
git stash clear 移除所有贮藏 清除整个贮藏列表
git stash branch 从贮藏创建分支 使用贮藏的更改创建新分支

从贮藏创建分支

## 从贮藏的更改创建一个新分支
git stash branch new-feature stash@{0}

处理合并冲突

## 如果贮藏导致冲突
git stash pop
## 手动解决冲突
git add.
git commit

部分贮藏

## 仅贮藏特定文件
git stash push -m "部分贮藏" path/to/file

## 交互式贮藏
git stash save -p "选择性更改"

最佳实践

  • 使用有意义的贮藏消息
  • 定期清理贮藏列表
  • 应用旧贮藏时要谨慎

LabEx 建议掌握这些贮藏管理技术,以提高你的 Git 工作流程效率。理解这些命令将帮助你更有效地管理正在进行的工作。

高级贮藏技术

选择性贮藏

部分文件贮藏

## 交互式选择要贮藏的代码块
git stash save -p "部分更改"

## 贮藏特定文件
git stash push -m "特定文件" path/to/file1 path/to/file2

贮藏工作流程可视化

graph TD A[未提交的更改] --> B{是否进行选择性贮藏?} B -->|是| C[交互式贮藏] B -->|否| D[完整贮藏] C --> E[选择特定更改] D --> F[保存整个工作区]

高级贮藏管理

贮藏未跟踪的文件

## 贮藏包括未跟踪的文件
git stash save -u "包括未跟踪的文件"

## 贮藏所有文件,包括被忽略的文件
git stash save -a "包括所有文件"

复杂的贮藏场景

贮藏比较表

场景 命令 目的
部分贮藏 git stash save -p 交互式选择更改
未跟踪的文件 git stash -u 包括新文件
所有文件 git stash -a 包括所有文件

远程贮藏处理

## 从贮藏创建一个补丁
git stash show -p > my-stash.patch

## 应用一个补丁
git apply my-stash.patch

带元数据的贮藏

## 贮藏时添加额外的上下文信息
git stash save -m "更改的详细描述"

高级冲突解决

## 使用三方合并重新应用贮藏的更改
git stash apply --index

## 应用后保留贮藏的更改
git stash apply --keep-index

性能考虑

graph LR A[贮藏创建] --> B{贮藏大小} B -->|大| C[性能影响] B -->|小| D[最小开销] C --> E[考虑替代策略]

最佳实践

  • 使用描述性消息
  • 对贮藏的更改进行选择性操作
  • 理解不同贮藏选项的影响

LabEx 建议掌握这些高级技术,以优化你的 Git 工作流程并有效处理复杂的开发场景。

总结

通过掌握 Git stash 技术,开发者可以无缝地暂停和恢复工作、在分支之间切换,并管理复杂的开发工作流程。理解贮藏管理使程序员能够维护干净、有条理的代码仓库,并增强他们整体的版本控制能力。