未提交的更改
修改的文件临时存储区
安全保存更改Git储藏(Stash)允许你临时保存工作目录和暂存区的更改,而不需要提交它们。这让你可以清理工作区,切换到其他分支,然后再恢复这些更改。
Git使用栈(Stack)数据结构来管理储藏。每个储藏都被压入栈中,你可以应用、弹出或删除栈中的储藏。
注意: 储藏只保存已跟踪文件的更改。默认情况下,未跟踪文件和忽略的文件不会被储藏。可以使用git stash -u来包含未跟踪文件。
储藏工作目录和暂存区的更改
储藏并添加描述性消息
显示所有储藏的列表
应用最新储藏,保留储藏
应用最新储藏并从栈中删除
删除最新储藏
包含未跟踪文件
包含所有文件(包括忽略的文件)
储藏但不包括已暂存的更改
显示特定储藏的更改
从储藏创建新分支
应用特定储藏(不删除)
应用并删除特定储藏
删除特定储藏
删除所有储藏
显示储藏的详细差异
提示: 使用git stash save "描述性消息"为储藏添加有意义的描述,这样在查看储藏列表时更容易识别每个储藏的内容。
在工作目录中编辑文件
git stash save "描述"
处理其他任务
git stash pop
在储藏操作前后检查状态:
注意: 使用git stash show -p可以查看储藏的详细差异,这在决定是否要应用某个储藏时非常有用。
当你在一个分支上工作时,需要立即切换到另一个分支处理紧急任务。
在拉取远程更新前储藏本地更改,避免合并冲突。
临时移除本地更改以测试干净的工作目录。
保存不确定是否要提交的实验性更改。
将一个分支的更改应用到另一个分支。
只储藏特定文件的更改。
git stash警告: 储藏不会保存未跟踪的文件,除非使用-u或-a选项。对于重要的未跟踪文件,最好先提交或备份。
技巧: 使用git stash --keep-index可以在储藏时保留已暂存的更改,这在只想测试暂存更改时很有用。
当应用储藏时出现冲突,可以从储藏创建新分支:
这会在应用储藏时创建新分支,避免与当前分支的冲突。
选择性地储藏特定更改:
这会交互式地询问要储藏哪些更改,类似于git add -p。
只储藏指定文件的更改:
这让你可以精确控制哪些文件被储藏。
当应用储藏时发生冲突的解决方法:
git stash save "修复登录bug"pop会删除储藏,先用apply测试专业提示: 可以将储藏命令添加到git别名中,例如git config --global alias.st 'stash',然后使用git st作为git stash的快捷方式。
| 方法 | 用途 | 优点 | 缺点 |
|---|---|---|---|
| git stash | 临时保存更改 | 快速、无需提交 | 不保存未跟踪文件(默认) |
| git commit | 永久保存更改 | 创建历史记录 | 需要提交消息,污染历史 |
| 临时分支 | 保存重要工作 | 更安全,可共享 | 更复杂,需要推送 |
| 手动备份 | 保存文件副本 | 完全控制 | 容易出错,不同步 |
决策指南: 对于短期、临时的更改使用储藏;对于可能需要回退或共享的重要工作,使用临时分支;对于实验性代码,使用储藏保存进度。