切换Git分支前的检查:管理尚未保存的修改
本文在AI辅助下由原文翻译而成。请结合原文核对专业术语和公式。
想查看另一分支,但还有修改文件时,应先整理什么内容保存在什么地方。编辑器尚未保存的句子、已写入磁盘但未提交的代码,以及新建未跟踪文件,保存方式不同。切换前读取状态,可减少忘记重要修改。

以下main与feature-note为说明用分支名,应改为读者仓库实际存在名称。本文命令并非自动在用户仓库执行的流程。以无子模块或进行中合并的简单仓库说明,实际错误应另读显示内容。
一览切换分支与恢复工作的顺序
说明用示意图——并非实际画面或测试结果。
1. 将编辑器内容保存至实际文件
2. 确认当前分支、跟踪与未跟踪修改
3. 保存所需范围并对照结果
4. 切换目标分支,确认实际状态
5. 在原工作位置应用并检查保存内容
1. 编辑器保存与Git提交是不同步骤
编辑器标签有未保存标记,内容可能仍与磁盘文件不同。用Git保存修改前,将要保留内容写入文件并确认实际路径。保存至其他名称文件或项目文件夹,即使读取当前仓库状态也可能找不到该内容。
写入磁盘不表示已包含在Git提交。Git区分工作目录、收集待提交修改的索引与提交历史。与其说“未保存代码”,明确编辑器未保存还是Git未提交,所需操作更清楚。
| 状态 | 检查哪里? | 保管前操作 |
| 编辑器未保存 | 标签标记与实际文件路径 | 将需保留内容保存为文件 |
| 已修改跟踪文件 | Git状态与差异 | 决定提交或暂存范围 |
| 新未跟踪文件 | 状态中新文件列表 | 决定是否包含在保存对象 |
| 被忽略文件 | 实际文件与忽略规则 | 必要时确认独立保存 |
虚构开发者只在编辑器修改笔记后创建Git stash,不能断定未保存句子已保管。重要内容应先让编辑器与磁盘一致,再关联Git观察范围。Git记录不替代编辑器全部临时状态。
2. 切换前读取当前分支与修改列表
git status --short --branch
git diff
git diff --cached
状态查看当前分支与修改文件,差异读取实际修改内容。一般非合并情形的简短状态,第一栏表示索引,第二栏表示工作目录。两个问号为未跟踪文件,默认状态列表可能不显示忽略文件。
虚构结果有notes.txt修改与new-plan.txt未跟踪标记时,决定两文件是否列入保存计划。只看跟踪文件差异,可能遗漏新文件,因此也看状态列表。读取new-plan.txt实际内容,区分是否为必要工作资料。
也宜记录当前分支名与返回位置。两分支名相似,可能在错误位置开始恢复。实际名称关联保存记录,比模糊记忆“返回旧分支”更便于切换后判断。
3. 选择提交修改与临时保存修改
有意义且完成的工作,可按项目惯例提交。仍进行中,可考虑用stash暂时保存。两选择按完成程度与返回计划决定,不为切换就将不必要文件也一起提交。
虚构notes.txt与new-plan.txt仍在编写时,应明确临时保存哪些文件。阅读旧代码部分修改与新文档是否同一任务组,为保存记录命名。以后多个临时记录,有说明才能更易选所需项。
重要资料未被Git跟踪时,需另确认保存条件。临时保存是当前仓库再次应用的操作手段,不自动保证外部备份或全部编辑状态保存。关键是不要遗漏新文件与忽略文件。
4. 包含未跟踪文件的临时保存示例
git stash push -u -m "before-switch-demo"
git stash list
git stash show -p -u 'stash@{0}'
git status --short --branch
上述示例指定-u,包含新未跟踪文件。Git官方文档区分stash保存工作目录和索引、-u包含未跟踪文件、-a包含忽略文件。这里默认示例不含-a,因此不能认为忽略文件也已保存。
stash命令后,读取列表与差异,确认实际创建什么记录。stash@{0}表示当时最新项,若又创建保存记录,就应重新选择所需项。PowerShell中含大括号引用,可如示例加引号传入命令。
也重新读取当前状态,因为可能还有未保存文件或其他修改。虚构忽略的local-output文件夹很重要时,不能仅凭-u保存结果就记录其内容已保留。确认剩余内容,用适当独立方法保存所需文件。

5. 切换被拒绝时,先检查剩余修改
git switch main
git status --short --branch
示例假设main实际存在,且要查看该分支。Git官方文档说明,切换并非总需干净工作目录,但可能丢失本地修改的切换默认会中止。不能说有未提交修改就一定失败,或一切换就全部消失。
出现拒绝文字,应读取相应文件与剩余修改,重新确认保存范围。进行中合并或冲突等其他条件也应独立处理。为消除错误直接加丢弃修改选项,可能与保留工作及切换目的不符。
切换成功时,确认实际当前分支。输入命令与已切换结果应分别读取。修改仍在时,确认内容并决定是否是新分支要处理的工作。出现意外文件,下一编辑前与原记录对照。
6. 在原分支重新应用保存内容
git switch feature-note
git stash list
git stash apply 'stash@{0}'
git status --short --branch
此顺序为返回feature-note,应用列表确认记录的说明示例。实际需阅读所需项说明和内容,选择引用。总像示例用最新项,可能应用其他工作保存内容,因此对照名称与时点。
官方文档区分apply保留列表项,pop关联应用与移除列表。可能发生冲突,不能自动假设应用成功。本示例用apply,保留原临时记录再读取结果。
若目的也包括恢复已加入索引的状态,需另确认。阅读官方文档中默认apply与恢复索引选项差异,按实际项目选择。文件内容已返回,与提交准备状态也相同,不记录为同一结果。
7. 冲突或文件缺失时的检查
应用冲突时,确认当前分支与保存修改是否重叠。比较原工作与新分支变更,决定保留内容。状态不明就重复应用同项,可能更复杂,因此先读取已产生结果。
新文件未回来时,确认原保存范围是否包含,以及所选stash是否正确。也对照是否只在编辑器编写,或属于忽略规则。不要将全部原因归为“stash删了”,而应关联保存前记录与实际列表。
| 恢复后确认 | 依据 |
| 是否原工作分支? | 当前分支显示 |
| 所需文件是否回来? | 文件列表与实际内容 |
| 新文件是否也存在? | 未跟踪文件与保存差异 |
| 是否还有冲突? | 状态与相应文件内容 |
| 临时记录是否保持? | stash列表 |
8. 恢复工作时保留简短记录
虚构工作备注可为“保存feature-note文档修改和新计划文件、查看main、返回原分支、应用指定项、对照文件内容”。记录用于留下执行顺序,并非添加实际未确认的恢复成功。
整理保存项前,确认必要内容已返回与冲突已解决。清理列表是移除原临时记录的选择,应在检查工作后判断。本文不提供批量删除命令,也不假设读者全部保存项都不需要。
切换前保存编辑器内容、读取状态与确认保存范围;切换后确认实际分支与恢复内容。留下每步依据,短暂切换也成为不丢失进行中修改、继续工作的流程。图片是自行制作的说明图。
官方来源与撰写标准
资料确认日期:2026-10-07。这是AI依据实际打开的官方资料撰写的说明。单独标注的计算、代码与检查案例用于说明,并非直接测试用户环境或实测结果。发布时重新确认功能与资料是否改变。
为帮助理解本文而制作的原创插画。
Tistory 原文 ↗