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,让你的开发工作流从'手忙脚乱'升级到'游刃有余'!

相关推荐
Easonmax14 小时前
【鸿蒙pc命令行适配】tig(git命令行可视化)工具移植实战:解决ncurses库依赖、terminfo终端适配与环境配置全流程
git·华为·harmonyos
petunsecn16 小时前
多 GitHub 账号与多平台 Git 使用(附加场景:就想用指定账号clone)
git·github
yuanmenghao17 小时前
Git submodule 与 git-repo(Google 的 repo 工具) 在多仓库管理上的差异
git
木易双人青17 小时前
git常用命令
git
热忱112818 小时前
Git 全套常用命令手册(含日常开发示例)
大数据·git·elasticsearch·搜索引擎
Aliex_git18 小时前
Git SSH 配置
笔记·git·学习·ssh
小舞O_o18 小时前
gitlab文件上传
linux·服务器·git·python·目标检测·机器学习·gitlab
C++ 老炮儿的技术栈1 天前
在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
c语言·c++·windows·git·vscode·visual studio
Robin罗兵1 天前
git使用教程2
git
bob_young1 天前
Git LFS + Gerrit 配置+lfs-test-server(git lfs push总是提示输入https密码解决)
git·lfs