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有多种类型:

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

关键点

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

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

💻 AtomGit(GitCode)实操步骤

🛠 步骤1:创建测试项目

bash 复制代码
# 1. 创建项目
mkdir git-stash-demo && cd git-stash-demo
git init
echo "# Git Stash Demo" > README.md
git add README.md
git commit -m "Initial commit"

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

bash 复制代码
# 1. 修改文件
echo "Feature 1" >> README.md

# 2. 添加到暂存区
git add README.md

# 3. 创建新分支
git branch feature-1

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

bash 复制代码
# 1. 保存未提交的更改
git stash

# 2. 查看stash列表
git stash list

执行结果示例:

复制代码
stash@{0}: WIP on feature-1: 1a2b3c4 Add feature 1

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

bash 复制代码
# 1. 切换到主分支
git checkout main

# 2. 恢复stash
git stash apply

🛠 步骤5:查看stash列表

bash 复制代码
# 查看stash列表
git stash list

# 删除stash
git stash drop stash@{0}

🌰 实战案例:处理紧急bug

bash 复制代码
# 1. 创建项目
mkdir bug-fix-demo && cd bug-fix-demo
git init
echo "# Bug Fix Demo" > README.md
git add README.md
git commit -m "Initial commit"

# 2. 开发功能
echo "Feature 1" >> README.md
git add README.md
git commit -m "Add feature 1"

# 3. 发现bug,需要紧急修复
git branch bugfix
git checkout bugfix

# 4. 保存未完成的工作
git stash

# 5. 修复bug
echo "Bug fixed" >> README.md
git add README.md
git commit -m "Fix bug"

# 6. 切换回feature分支
git checkout feature-1

# 7. 恢复stash
git stash apply

# 8. 继续开发
echo "Feature 1 continued" >> README.md
git add README.md
git commit -m "Continue feature 1"

❌ 常见问题避坑指南

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

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

解决

bash 复制代码
# 使用-u选项保存未跟踪的文件
git stash -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。

解决

bash 复制代码
# 保留stash
git stash apply

# 如果想删除stash,使用
git stash drop

💡 Stash管理的高级用法

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

bash 复制代码
# 保存特定文件的更改
git stash -p

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

📌 2. 保存带描述的stash

bash 复制代码
# 保存带描述的stash
git stash save "Add feature 1"

📌 3. 查看stash的详细信息

bash 复制代码
# 查看stash的详细信息
git stash show stash@{0}

📌 4. 将stash保存为提交

bash 复制代码
# 将stash保存为提交
git stash apply
git commit -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,让你的开发工作流从'手忙脚乱'升级到'游刃有余'!

相关推荐
CNRio9 小时前
Day 48:Git的高级技巧:使用Git的worktree多工作区管理
大数据·git·elasticsearch
CNRio9 小时前
Day 45:Git的高级技巧:使用Git的bisect快速定位bug
git·elasticsearch·bug
Huazzi.11 小时前
PowerShell 配置以及使用指南
windows·git·编辑器·shell·powershell·效率
随便写点哈11 小时前
git 版本控制系统
git
工具罗某人14 小时前
docker快速部署启动gitlab
git·docker·云原生·eureka
人工智能训练21 小时前
OpenEnler等Linux系统中安装git工具的方法
linux·运维·服务器·git·vscode·python·ubuntu
dblens 数据库管理和开发工具1 天前
Git 指令大全(全干货版)
运维·git·ubuntu
张二娃同学1 天前
深度学习入门篇——Github的使用和项目的导入
人工智能·git·深度学习·开源·github
SadSunset1 天前
Git分支
git