Git恢复点与手动stash
这些代码块对应不同情况,不是一个完整脚本。请选择适合仓库的情况,并替换分支名、路径和VERIFIED_COMMIT。中止命令只适用于对应的正在进行的操作,不要执行两种备选方案。
简短答案
FluxGit恢复点记录受覆盖历史操作的状态。手动stash把本地修改暂时保存起来供以后使用,这是另一套流程。
示例与前提
G12教程在tracked文件有待处理修改时切换分支。除非明确包含,untracked文件会继续留在目录中。
修改前检查状态
检查git status --short和git diff。切换前决定保存哪些内容;干净的工作目录并不等于永久备份。
git status --short
git diff保留引用或独立检出
创建带有明确消息的手动stash。git stash push保存tracked修改;只有需要包含untracked文件时才使用-u。
git stash push -m "school/manual-before-switch"
git stash list第一种操作
检查git stash list,然后切换到目标分支。回来后,在应用所选条目之前重新检查上下文。
git switch target-branch有意选择另一种结果
git stash apply保留条目。git stash pop只有在应用成功后才删除条目;出现冲突时条目仍被保留。
git stash show --patch 'stash@{0}'
git stash apply 'stash@{0}'限制与例外
自动恢复点覆盖受保护路径中的reset、rebase、cherry-pick、revert和merge。discard与clean不会创建通用的Flux restore point。
冲突与清理
出现冲突时,检查文件并明确解决。不要反复运行pop,也不要为了隐藏待处理状态而删除条目。
验证结果
应用stash后核对文件、索引和测试。只有确认所需工作已被保存,才删除相应条目。
git status --short
git diff
git diff --cached常见问题
stash不会随着push自动发布,也不能代替备份。恢复依赖相关本地状态仍然存在。
在FluxGit中审查操作
Safety Timeline汇集reflog移动、风险与恢复点。恢复点数据保持在本地;使用每项操作专属的预览和恢复上下文。
Git官方文档
工作未完成时切换Git分支:直观讲解git stash
用git stash保存已跟踪的修改并命名,切换分支,回来后用pop恢复。讲解为什么未跟踪文件仍然保留,以及apply和成功的pop之间的区别,并介绍终端命令。
在测试仓库中录制。英语旁白,简体中文字幕。
阅读旁白文字稿
- 你正在修改代码,却需要马上查看另一个分支。工作还没准备好提交,你也不想丢失它。
- 这是app.py中尚未完成的修改。
- stash会暂存已跟踪的修改。这里它保存app.py的修改,并从工作文件夹中移除该修改。未跟踪的文件仍留在磁盘上。pop成功后会恢复修改,并删除对应的stash条目。
- 选择Stash current changes,起一个之后能认出来的名字。
- 切换到另一个分支。已跟踪的修改已存入stash。未跟踪的文件仍在文件夹中。
- 那边处理完了,回到main。
- 对stash执行pop。修改回到了app.py,stash也消失了。
- apply还是pop?apply会恢复修改并保留stash条目。pop仅在修改成功应用后删除条目。如果出现冲突,stash会保留。
- 在终端中:执行带消息的git stash push,切换分支再回来,然后执行git stash pop。
- 总结:未完成的工作放在架子上,不要塞进一个未完成的提交。下一课:在拉取请求之前整理提交。