news 2026/9/3 5:02:23

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/9/2 18:33:57

批量生成任务管理:使用脚本自动化运行Sonic多个视频

批量生成任务管理:使用脚本自动化运行Sonic多个视频 在短视频内容爆炸式增长的今天,企业对“会说话的数字人”需求正以前所未有的速度攀升。无论是在线教育平台批量生成讲师视频,还是电商客服系统定制虚拟导购员,传统依赖人工逐个…

作者头像 李华
网站建设 2026/9/2 18:35:15

7天掌握ControlNet-sd21:从零到精通的完整实战指南

7天掌握ControlNet-sd21:从零到精通的完整实战指南 【免费下载链接】controlnet-sd21 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/controlnet-sd21 还在为AI绘画控制不精准而烦恼?想要让AI真正理解你的创作意图吗?Cont…

作者头像 李华
网站建设 2026/9/2 19:15:16

你真的会用Kafka Streams过滤吗?这4种高级用法必须掌握

第一章:Kafka Streams数据过滤的核心概念与挑战Kafka Streams 是构建实时流处理应用的轻量级库,其核心能力之一是高效地对持续流入的数据进行过滤操作。数据过滤在流处理中至关重要,它允许开发者根据业务逻辑剔除无关数据,仅保留关…

作者头像 李华
网站建设 2026/9/2 13:33:57

【Java高级架构师必修课】:如何在微服务中动态生成并加载模块

第一章:Java模块化系统的演进与微服务挑战Java 自诞生以来,其类路径(Classpath)机制在灵活性和兼容性方面表现出色,但随着应用规模的扩大,尤其是微服务架构的普及,缺乏原生模块化支持的问题日益…

作者头像 李华
网站建设 2026/9/2 13:22:01

Java物联网设备通信全解析(MQTT+CoAP协议深度对比)

第一章:Java物联网设备通信全解析(MQTTCoAP协议深度对比)在物联网系统中,设备间的高效通信是核心挑战之一。Java作为企业级应用开发的主流语言,广泛应用于物联网后端服务构建。选择合适的通信协议对系统性能、资源消耗…

作者头像 李华
网站建设 2026/9/2 19:15:58

GitHub镜像提升Sonic相关代码克隆速度的技巧分享

GitHub镜像加速Sonic项目克隆:高效部署数字人模型的实战指南 在AIGC浪潮席卷内容创作领域的当下,越来越多开发者尝试将前沿AI模型集成到本地工作流中。腾讯与浙江大学联合推出的轻量级数字人口型同步模型 Sonic,凭借其高精度唇形对齐、单图驱…

作者头像 李华