本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
因为最近同期不同需求方提的需求比较多,所以我的分支也比较多。有时候由于他们有紧急的,我不得不频繁地切换分支去看。
今天发生了一件很严重的事情:因为我用git stash 比较多,在切换多个分支后,其中一个分支的git stash 成功地弄丢了。。。
这是个悲伤的故事,我先写问题和解决办法,着急的盆友可以赶紧去试试解决问题,后面再写原因。
具体现象和出现的步骤:
- 从dev分支(平时主要功能都在dev分支,上线的时候才合并到master)拉取了一个 func1 分支(git checkout -b func1)
- 在func1上改了4个文件
- 需要切到 func2 分支改点东西
- 在 func1 分支使用 git stash (因为这几个文件还没写完,暂时没法提交)
- 从 func1 分支切到func2 分支(git checkout func2),在该分支上改了2个文件,然后有个紧急的事情需要切到 func3 分支
- func2 分支刚才改的那俩文件还不能提交,于是又在 func2 分支使用 git stash
- 从 func2 分支切到func3 分支(git checkout func3),在该分支上改了1个文件并且提交了
- 然后切到 func1 分支,执行 git stash pop, 预期是拿到在该分支上修改的4个文件,结果拿到了在 func2 分支上修改的文件...
问题的关键在于: 我以为 git stash 是只针对当前分支,结果 git stash 是针对所有分支。。。
因为以前没咋用过,遇到这种情况我慌了,执行了好几遍 git stash pop 也没用。。。
最后解决办法:
-
先执行 git stash list 拿到所有的 git stash 的列表,结果如下图
-
找到对应分支的 git stash
-
然后执行 git stash pop stash@{1} (这里的 stash@{1} 换成你自己想恢复的)
注意: 在vscode的终端 执行“git stash pop stash@{1}” 会报错: error: unknown switch `e' 这里需要用 git bash 或电脑的命令行,在你的项目目录中,右键,选择“Git Bash Here”, 然后在 git bash 中执行 “git stash pop stash@{1}” 即可。
关于git stash可参考: 阮一峰的git教程