news 2026/7/2 1:39:25

Day 42:Git的高级技巧:使用Git的stash管理未提交的更改

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day 42:Git的高级技巧:使用Git的stash管理未提交的更改

Day 42:Git的高级技巧:使用Git的stash管理未提交的更改

“你有没有经历过这样的’崩溃时刻’:你正在写一个重要的功能,突然收到一个紧急的bug修复请求,结果你还没提交的代码就’消失’了?或者你正在修改一个文件,突然发现需要切换到另一个分支,但又不想提交未完成的工作?别担心,Git的stash就是你的’工作暂存区’!”

🌟 为什么stash是Git的"工作暂存区"?

想象一下,你正在厨房做饭,突然电话响了,需要出去接电话。你会把正在炒的菜放在一边,等接完电话再回来继续炒。Git的stash就是你的’工作暂存区’,它让你可以暂时保存未提交的更改,以便你可以切换到其他任务,之后再回来继续工作。

重点:stash是Git的’工作暂存区’,它允许你暂时保存未提交的更改,以便你可以切换分支或进行其他操作,之后再恢复这些更改

在GitCode上,stash是本地功能,不会自动推送到远程仓库。它只保存在你的本地Git仓库中,让你可以安全地切换工作环境。

🧠 核心知识点:stash的类型与用途

Git stash有多种类型:

类型命令说明适用场景
默认stashgit stash保存所有未提交的更改临时切换工作环境
带消息的stashgit stash save "message"保存带描述的更改便于识别不同的stash
带路径的stashgit stash -p保存特定文件的更改只保存部分更改
临时stashgit stash -u保存未跟踪的文件保存未跟踪的文件

关键点

  1. stash保存的是"未提交的更改",不是提交
  2. stash会保存工作区和暂存区的更改
  3. stash是本地功能,不会推送到远程仓库
  4. stash列表会保存在本地,直到你手动删除

小贴士:在GitCode上,stash不会显示在仓库的"提交历史"中,它只存在于你的本地环境中。

💻 AtomGit(GitCode)实操步骤

🛠 步骤1:创建测试项目

# 1. 创建项目mkdirgit-stash-demo&&cdgit-stash-demogitinitecho"# Git Stash Demo">README.mdgitaddREADME.mdgitcommit-m"Initial commit"

🛠 步骤2:模拟未完成的工作

# 1. 修改文件echo"Feature 1">>README.md# 2. 添加到暂存区gitaddREADME.md# 3. 创建新分支gitbranch feature-1

🛠 步骤3:使用stash保存更改

# 1. 保存未提交的更改gitstash# 2. 查看stash列表gitstash list

执行结果示例:

stash@{0}: WIP on feature-1: 1a2b3c4 Add feature 1

🛠 步骤4:切换分支并恢复stash

# 1. 切换到主分支gitcheckout main# 2. 恢复stashgitstash apply

🛠 步骤5:查看stash列表

# 查看stash列表gitstash list# 删除stashgitstash drop stash@{0}

🌰 实战案例:处理紧急bug

# 1. 创建项目mkdirbug-fix-demo&&cdbug-fix-demogitinitecho"# Bug Fix Demo">README.mdgitaddREADME.mdgitcommit-m"Initial commit"# 2. 开发功能echo"Feature 1">>README.mdgitaddREADME.mdgitcommit-m"Add feature 1"# 3. 发现bug,需要紧急修复gitbranch bugfixgitcheckout bugfix# 4. 保存未完成的工作gitstash# 5. 修复bugecho"Bug fixed">>README.mdgitaddREADME.mdgitcommit-m"Fix bug"# 6. 切换回feature分支gitcheckout feature-1# 7. 恢复stashgitstash apply# 8. 继续开发echo"Feature 1 continued">>README.mdgitaddREADME.mdgitcommit-m"Continue feature 1"

❌ 常见问题避坑指南

🔴 问题1:git stash保存了未跟踪的文件

原因:默认的git stash不会保存未跟踪的文件。

解决

# 使用-u选项保存未跟踪的文件gitstash-u

🔴 问题2:stash应用后,修改的文件没有被正确恢复

原因:stash应用后,如果文件被修改,可能会发生冲突。

解决

  1. 在应用stash前,确保文件没有被修改
  2. 如果有冲突,使用git checkout --theirsgit checkout --ours解决
  3. 或者使用git stash apply --index来保留暂存区的状态

🔴 问题3:stash列表太多,难以管理

原因:多次使用stash,导致stash列表很长。

解决

  1. 定期清理stash:git stash drop stash@{n}
  2. 为stash添加描述:git stash save "message"
  3. 使用git stash list查看所有stash

🔴 问题4:stash应用后,想保留stash

原因:默认的git stash apply不会删除stash。

解决

# 保留stashgitstash apply# 如果想删除stash,使用gitstash drop

💡 Stash管理的高级用法

📌 1. 保存特定文件的更改

# 保存特定文件的更改gitstash-p

执行后,Git会逐个询问你是否要保存每个文件的更改。

📌 2. 保存带描述的stash

# 保存带描述的stashgitstash save"Add feature 1"

📌 3. 查看stash的详细信息

# 查看stash的详细信息gitstash show stash@{0}

📌 4. 将stash保存为提交

# 将stash保存为提交gitstash applygitcommit-m"Restored from stash"

🎯 今日小结

项目说明
stash是什么Git的’工作暂存区’,临时保存未提交的更改
关键命令git stashgit stash listgit stash applygit stash dropgit stash save
最佳实践1. 使用git stash save添加描述 2. 定期清理stash列表 3. 在应用stash前确保文件没有被修改
常见场景1. 切换分支前保存更改 2. 处理紧急bug 3. 临时处理其他任务

📅 明日预告:Day 43:Git的高级技巧:使用Git的rebase简化提交历史

“明天我们将深入探讨如何使用Git的rebase简化提交历史,让你的项目历史更加清晰!”


✨ 今日金句:stash不是’工作中的暂停键’,而是’工作中的加速器’。用好Git stash,让你的开发工作流从’手忙脚乱’升级到’游刃有余’!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 10:46:56

企业级Java应用模块动态化实践(99%开发者忽略的关键细节)

第一章:企业级Java应用模块动态化的认知革命在现代软件架构演进中,企业级Java应用正从传统的单体结构向高度解耦、可动态扩展的模块化体系转型。这一变革的核心在于实现业务功能的按需加载与运行时更新,从而提升系统的灵活性、可维护性及部署…

作者头像 李华
网站建设 2026/6/16 5:48:10

JVM崩溃日志看不懂?深度解读HS_ERR_PID文件的6个关键线索

第一章:JVM崩溃日志的核心价值与定位意义JVM崩溃日志(通常称为hs_err_pid文件)是Java虚拟机在遭遇致命错误时自动生成的关键诊断文件。它记录了崩溃瞬间的线程状态、堆栈信息、内存使用情况、加载的库文件以及JVM配置参数,是定位底…

作者头像 李华
网站建设 2026/6/16 10:47:50

音频采样率影响Sonic生成效果吗?实测数据分析

音频采样率影响Sonic生成效果吗?实测数据分析 在虚拟数字人内容爆发式增长的今天,越来越多的内容创作者和开发者开始关注一个看似微小却常被误解的技术细节:输入音频的采样率是否真的会影响AI驱动口型同步模型的表现? 尤其是像腾讯…

作者头像 李华
网站建设 2026/6/24 21:46:48

编剧用Sonic快速生成角色台词视觉化预览

编剧如何用Sonic实现台词的“所见即所说”? 在影视创作中,一句台词是否有力,往往不在于文字本身,而在于它被“说”出来的那一刻——语气、停顿、表情、唇形动作,共同构成了观众对角色性格与情绪的真实感知。可长期以来…

作者头像 李华
网站建设 2026/6/15 23:54:31

【高性能Java系统必修课】:外部内存访问权限配置的5大核心原则

第一章:Java外部内存访问权限的核心概念Java 外部内存访问权限是 Java 平台在 Project Panama 和 JDK 14 中引入的重要机制,旨在安全、高效地操作堆外内存。与传统的 java.nio.ByteBuffer 和 sun.misc.Unsafe 不同,新的外部内存访问 API 提供…

作者头像 李华
网站建设 2026/6/20 15:48:50

B站字幕获取实战手册:从零开始掌握离线字幕提取技巧

B站字幕获取实战手册:从零开始掌握离线字幕提取技巧 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 你是否曾经遇到过这样的场景?在B站看到…

作者头像 李华