问题背景:
因为本人手里有好几个不同的项目,当手里有正在做的项目,却被临时叫去修改另外一个项目,而此时又不想把现有的代码提交,于是就强制切换到了另外一个分支上。悲剧的事情发生了,再次切换回来的时候发现之前写的代码丢失了。
解决方法:
本人使用的编程工具为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)