Git开发者必备技能:正确使用 git stash 暂存工作状态

在日常开发中,我们经常会遇到这样的场景:

  • 当前分支branch_a有一些尚未完成的修改
  • 需要切换到其他分支(如 dev)去拉取最新的代码或修复某个紧急BUG

此时,git stash 命令就成为了非常实用的工具。

一、使用场景:切换分支前如何暂存代码?

常见操作流程:

  1. 暂存当前分支 branch_a 的修改(可选提交或 stash)
  2. 切换到 dev 分支
  3. dev 分支上进行相关操作(拉代码或修复某个紧急bug或其他…)

二、操作步骤:使用哪些 git 命令?

下面以从当前分支 branch_a 切换到其他分支 dev ,并 pull 分支 dev 为例,介绍一下使用 git stash 命令相关的操作步骤。

步骤 1:确认当前分支并查看状态:

git status

这一步可以查看你当前是否在分支 branch_a 上,以及是否有未提交的更改。

步骤 2:保存当前工作进度:

如果你的更改还没提交:
方法一:你可以用 git stash 暂存它们(推荐):

git stash

这样你的工作区和暂存区的内容会被保存到一个“堆栈”里,等会可以恢复。
方法二:如果你已经提交了(或者打算直接提交):

git add .
git commit -m "临时提交:切换分支前保存进度"

步骤 3:切换到 dev 分支:

git checkout dev

如果提示你没有这个分支,可以使用以下命令从远程拉下来并创建:

git checkout -b dev origin/dev

步骤 4:拉取远端最新的 dev 分支更新:

git pull origin dev

如果你已经在 dev 分支了,也可以简写成:

git pull

步骤 5:切回原来的分支 branch_a:

git checkout branch_a

步骤 6:恢复之前 stash 的代码(如果你执行过 git stash):

git stash pop

PS:如果你多次 stash 过,可以使用 git stash list 查看,再使用 git stash apply stash@{n} 恢复。

查看暂存列表:

git stash list

恢复暂存:

git stash pop     # 恢复并删除记录(类似栈的 pop)
git stash apply   # 恢复但不删除记录

两者默认都只暂存已跟踪文件的修改。

三、进阶操作:git stash save 与 git stash push 的区别与用法

在 Git 中,git stash savegit stash push 的功能非常相似,但有一些细微差别。很多人对这两个命令存在疑惑,其实它们的历史背景和使用推荐差异很明显,以下是它们的区别和使用建议:

命令状态推荐程度备注
git stash save已废弃(旧版)❌ 不推荐Git 2.13 起不推荐,语义不清
git stash push推荐(新版)✅ 推荐新版 Git 推荐,功能更强大

🌟 git stash save(旧版):

git stash save "描述信息"    # 只能添加备注
  • 会把工作区和暂存区修改一起存入 stash。
  • “描述信息” 是备注说明,便于后续查找。
  • 已废弃,不建议继续使用(从 Git 2.13 开始不推荐,Git 2.30+ 可能提示 deprecated)。

🌟 git stash push(新版):

git stash push -m "描述信息"    # 添加备注(必须用 -m)

其他参数:

git stash push -- path/to/file  # 只暂存特定文件
git stash push -u               # 包含未跟踪文件
git stash push -a               # 包含未跟踪和忽略文件
  • 功能与 git stash save 相同,但语义清晰、扩展性强。
  • -m 用于添加备注信息,强烈建议加上备注,便于管理。
  • 新版 Git 的推荐写法,语义清晰、可扩展。

如果不需要备注,git stash push 即可,等同于 git stash(两者一致)。
推荐始终加 -m 备注,避免后续忘记 stash 内容。

✅ 使用建议:

一般来说,只要你的 Git 版本 ≥ 2.13,完全可以安心使用 git stash push

你可以通过以下命令确认你的 Git 版本:

git --version

除非你的 Git 版本很老(低于 2.13),否则不应再使用 git stash save

四、常见问题解答

❓ Q1:stash 的内容会永久保存吗?

✅ 是的,直到手动删除(git stash drop)或执行 git stash clear

❓ Q2:如何暂存被 .gitignore 忽略的文件?

git stash push -a  # -a = --all

❓ Q3:冲突了怎么办?

恢复时若冲突:

  1. 手动解决冲突文件
  2. git add 标记已解决
  3. git stash drop 完成清理

五、总结

  • 切分支、更新代码前,养成良好的 stash 习惯,避免丢失修改。
  • 优先使用 git stash push -m “备注” 暂存修改。
  • 不再使用已废弃的 git stash save
  • 掌握好 git stash ,你的多分支协作效率会大幅提升。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比特熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值