> 技术文档 > VsCode 使用 git进行 源代码管理时,切换分支导致未保存代码丢失怎么恢复的两种情况_vscode 切换分支

VsCode 使用 git进行 源代码管理时,切换分支导致未保存代码丢失怎么恢复的两种情况_vscode 切换分支


问题一

问题描述

当已经在当前分支上修改文件后,选择切换分支,提示签出会覆盖本地更改。怎么选择?
如图
VsCode 使用 git进行 源代码管理时,切换分支导致未保存代码丢失怎么恢复的两种情况_vscode 切换分支

解决方式

关于VSCode弹窗选项的含义及功能说明:


​1. 三个选项的含义​
• ① 储藏并迁出(Stash and Checkout)

含义:将当前未提交的本地修改保存到“储藏区”(Stash),然后安全切换到目标分支。
适用场景:你希望保留当前未提交的代码,但暂时不想提交到当前分支(例如临时修复其他分支的Bug)。
风险:无(修改被暂存,可通过 git stash pop 恢复)。

• ② 迁出更改(Checkout with Changes)

含义:直接携带未提交的本地修改切换到目标分支。
适用场景:你明确知道目标分支可以兼容当前修改(例如同一功能的分支切换)。
风险:若目标分支与当前修改冲突,可能导致代码混乱或覆盖。

• ③ 强制迁出(Force Checkout)

含义:强制丢弃所有未提交的本地修改,切换到目标分支。
适用场景:你确定当前修改不再需要(例如临时调试代码)。
风险:所有未提交的修改将永久丢失!


​2. 弹窗来源的插件​
该弹窗由 VSCode内置的Git功能 提供(非第三方插件)。当你在未提交或储藏修改的情况下切换分支时,VSCode的Git集成会自动触发此提示,防止意外数据丢失。


​3. 避免切换分支后无法恢复的方法​
根据图中提示和Git最佳实践,可通过以下方式避免问题:

  1. 提交修改(Commit)
    使用 git commit 将当前修改提交到本地仓库,确保修改与当前分支绑定。

    bash

    复制

    git add . git commit -m \"保存当前修改\" 
  2. 暂存修改(Stash)
    若不想提交,使用 git stash 将修改暂存到独立区域,切换分支后可随时恢复。

    bash

    复制

    git stash save \"临时保存\" 
  3. 切换分支后恢复
    • 恢复暂存内容git stash pop

    • 查看暂存列表:git stash list


​总结​
• 优先提交或暂存:确保所有修改被安全记录。

• 慎用强制迁出:仅在明确不需要当前修改时使用。

• 依赖VSCode内置Git功能:无需额外插件即可管理分支切换风险。

问题二

问题描述

当在切换分支时,没有暂存本地的修改文件,导致切换分支之后修改文件丢失的情况。

解决方式

使用插件工具 : git Graph
在vsCode 的 左下角,有 git Graph 的可视化窗口打开按键如下:
VsCode 使用 git进行 源代码管理时,切换分支导致未保存代码丢失怎么恢复的两种情况_vscode 切换分支

点击后打开 git 分支的 可视化窗口:如下
VsCode 使用 git进行 源代码管理时,切换分支导致未保存代码丢失怎么恢复的两种情况_vscode 切换分支

这里 和版本同名的 stash 提交 就是切换前 暂存的 更改内容,这里 因为我在切换时选择了 迁出更改 所以将 更改内容 切换到了分支上。

  • 在再次切换回主分支时,因为迁出更改所以切换前的分支(主分支)就没有了更改记录信息。
  • 并且因没有提交更改,所以并没有将更改链接到 切换后的分支上(林叶枫MQTT分支)

为了恢复更改信息到主分支

  • 首先 切换到 期望应用的分支上(这里是主分支)

  • 右键 暂存更改记录,选择 Apply stash 将会把暂存更改中的内容应用到当前分支

    • VsCode 使用 git进行 源代码管理时,切换分支导致未保存代码丢失怎么恢复的两种情况_vscode 切换分支
  • 点击 源代码管理,就会发现 暂存更改 已经显示列出。

  • 正常进行提交操作就可以合并更改内容。

  • 补充

    • 如果已经有了 暂存更改中 涉及文件的 再次修改,这时应用stash内容,会显示应用冲突

    • 右键 源代码管理更改栏 右侧 的 ...(更多

    • 选择 Commit 进行合并。

      • VsCode 使用 git进行 源代码管理时,切换分支导致未保存代码丢失怎么恢复的两种情况_vscode 切换分支
    • 源代码管理 中会出现 合并更改 的栏位。

      • 点击 合并更改栏位 下的冲突文件 ,解决文件的冲突
    • 解决完全部冲突后,提交暂存更改

如果在切换分支时选择了 储藏并迁出 那么在切换后更改不会同步到切换后分支(举例场景中是林叶枫MQTT分支)。切换回切换前分支(举例场景中是主分支)时会有储存的更改记录,这时就可以按照需求继续操作。

补充:在git Graph 的可视化界面中,右键更改记录 以下是每个选项的简要说明:
• Apply Stash…:将stash中的内容应用到当前分支,但不删除stash。这意味着stash中的内容仍然存在,你可以稍后再次应用或删除它。
• Create Branch from Stash…:从stash中的内容创建一个新的分支。这允许你在不影响当前分支的情况下尝试stash中的更改。
• Pop Stash…:将stash中的内容应用到当前分支,并自动删除stash。这意味着stash中的内容将不再可用。
• Drop Stash…:删除stash中的内容,而不将其应用到任何分支。

如果你想要将stash中的内容合并到当前的master分支,并且不再需要stash中的内容,你应该选择Pop Stash…。这将应用stash中的更改并删除stash。

如果你想要保留stash中的内容以便将来使用,或者你想要在应用stash之前创建一个新的分支来测试这些更改,那么你应该选择Apply Stash…或Create Branch from Stash…。

根据你的需求选择最合适的选项。如果你不确定,通常选择Pop Stash…是最安全的选择,因为它会直接将更改应用到当前分支并清理stash。