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最佳实践,可通过以下方式避免问题:
-
提交修改(Commit)
使用git commit
将当前修改提交到本地仓库,确保修改与当前分支绑定。bash
复制
git add . git commit -m \"保存当前修改\"
-
暂存修改(Stash)
若不想提交,使用git stash
将修改暂存到独立区域,切换分支后可随时恢复。bash
复制
git stash save \"临时保存\"
-
切换分支后恢复
• 恢复暂存内容:git stash pop
• 查看暂存列表:
git stash list
总结
• 优先提交或暂存:确保所有修改被安全记录。
• 慎用强制迁出:仅在明确不需要当前修改时使用。
• 依赖VSCode内置Git功能:无需额外插件即可管理分支切换风险。
问题二
问题描述
当在切换分支时,没有暂存本地的修改文件,导致切换分支之后修改文件丢失的情况。
解决方式
使用插件工具 : git Graph
在vsCode 的 左下角,有 git Graph
的可视化窗口打开按键如下:
点击后打开 git 分支的 可视化窗口:如下
这里 和版本同名的 stash 提交 就是切换前 暂存的 更改内容,这里 因为我在切换时选择了 迁出更改 所以将 更改内容 切换到了分支上。
- 在再次切换回主分支时,因为迁出更改所以切换前的分支(主分支)就没有了更改记录信息。
- 并且因没有提交更改,所以并没有将更改链接到 切换后的分支上(林叶枫MQTT分支)
为了恢复更改信息到主分支
-
首先 切换到 期望应用的分支上(这里是主分支)
-
右键 暂存更改记录,选择
Apply stash
将会把暂存更改中的内容应用到当前分支 -
点击 源代码管理,就会发现 暂存更改 已经显示列出。
-
正常进行提交操作就可以合并更改内容。
-
补充
-
如果已经有了 暂存更改中 涉及文件的 再次修改,这时应用stash内容,会显示应用冲突
-
右键 源代码管理 中 更改栏 右侧 的
...
(更多) -
选择
Commit
进行合并。 -
在 源代码管理 中会出现 合并更改 的栏位。
- 点击 合并更改栏位 下的冲突文件 ,解决文件的冲突
-
解决完全部冲突后,提交暂存更改
-
如果在切换分支时选择了 储藏并迁出 那么在切换后更改不会同步到切换后分支(举例场景中是林叶枫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。