菜鸟笔记
提升您的技术认知

解决git切换分支导致代码丢失的问题

解决git切换分支导致代码丢失的问题

问题背景:

​ 因为本人手里有好几个不同的项目,当手里有正在做的项目,却被临时叫去修改另外一个项目,而此时又不想把现有的代码提交,于是就强制切换到了另外一个分支上。悲剧的事情发生了,再次切换回来的时候发现之前写的代码丢失了。

解决方法:

​ 本人使用的编程工具为VS Code。一般上述情况下,是无法进行正常切换分支的。因为git的工作机制会要求尽量保持一个较为干净的工作区和暂存区。所以就算你成功切换了分支,vscode会帮你把切换前的代码执行stash,就是储藏起来。当你再次切换回来的时候,可以从这个‘’贮藏室‘’里面取出之前存放的代码

​ 执行指令git stash list可以用来查看目前储藏室里面已经存储的代码列表,取出来也很简单。使用指令git stash apply stash@{n},其中的n代表的是list列表的前缀,根据需要恢复的代码进行变化的。

​ 但是此时需要注意一个问题,就是在powershell中使用该指令,会出现大括号{}不被识别的现象。这是因为大括号在 PowerShell 中被认为是代码块执行标识符,若想正常使用,可用反引号 ` 进行转义。当然也可以直接在git bash中使用该指令。

​ 通过上述的方法,可以成功找回丢失的代码。

 1) 问题出现原因:当前在A分支修改一个问题,修改进行到一半,来了一个紧急的生产问题需要修复,在不提交当前分支代码的情况下,切换到M分支修改紧急需求。修改完毕后,A分支修改的内容丢失。
 2) 解决:
     i. 接到紧急任务后,在A分支使用 git stash 暂存当前修改,当前代码会恢复到本地最近一次commit
     ii. git checkout M 切换到M分支,完成紧急迭代任务
     iii. git checkout A 切回原分支,当前代码一贫如洗
     iv. git stash list 查看暂存列表,里面(# list stashed changes in this git )
     stash@{0}: xxxxxxxxxxxxxxx;
     stash@{1}: yyyyyyyyyyyyyyyyyyyyy;
     stash@{2}: zzzzzzzzzzzzzzzzzzzzzzzzz;
     stash@{3}: vvvvvvvvvvvvvvvvvvv;
     v. 如果没有在次中间使用git stash 的话,可以直接看最近的一次暂存git show stash@{0}
     vi. 两种方式取出这条暂存:
     i. git stash apply stash@{0} 取出暂存号为stash@{0}的代码,对暂存列表无影响(# see the last stash )
     ii.git stash pop 取出最近的一次暂存,并将其在暂存列表中删除(apply last stash and remove it from the list)