在日常开发中,我们经常会遇到这样的场景:
- 当前分支
branch_a
有一些尚未完成的修改 - 需要切换到其他分支(如
dev
)去拉取最新的代码或修复某个紧急BUG
此时,git stash
命令就成为了非常实用的工具。
一、使用场景:切换分支前如何暂存代码?
常见操作流程:
- 暂存当前分支
branch_a
的修改(可选提交或 stash) - 切换到
dev
分支 - 在
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 save
和 git 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:冲突了怎么办?
恢复时若冲突:
- 手动解决冲突文件
- git add 标记已解决
- git stash drop 完成清理
五、总结
- 切分支、更新代码前,养成良好的 stash 习惯,避免丢失修改。
- 优先使用 git stash push -m “备注” 暂存修改。
- 不再使用已废弃的 git stash save。
- 掌握好
git stash
,你的多分支协作效率会大幅提升。