问题描述
我们在开发过程中,一个项目肯定不止一个分支,这里小编就以 master 、blog 两个分支为例,我们先在 master 分支中编辑 a.txt ,由于紧急情况 a.txt 文件还没编辑好,另外分支出现问题,需要切换到有问题的分支进行处理 ,但是我们切换到 blog 分支中,这时我们查看 blog 分支中的 a.txt 中的内容也变了,如下:
解决问题
方案一:
这种方案就是在某一个分支修改文件之后,先 add 并且 commit 之后再去切换分支,这种方式是最常见的,小编就不演示了。
方案二:
第一种方式是可取,但总会出现上面的问题,那么这时候就可以使用第二种方式即可解决问题。
- 使用场景:
当我在一个分支 master 中修改了文件,但是还没有完全改好,此时我并不想 add/commit,但是这个时候有一个更急迫的事情在另外一个分支 blog 上需要我去做,我必须要切换分支。
这种情况下,会出现如下问题:
- 1、从 master 分支切换到 blog 之后,工作区的代码还是 master 分支种的代码,不符合我的工作要求。
- 2、假设对于问题1无关紧要,在 blog 分支种直接修改工作区的代码,等我在 blog 分支中修改完后提交完,切回到 master分支中,这时我们会发现我们之前写的没提交的代码全没了。
现在假设一开始 master 和 blog 分支中的文件内容都是一致的,而且两个分支的工作区都是干净的,即没有东西需要 add/commit ,此时,我在 master 中修改了文件,修改完成之后,执行 git status 命令我们看到 master 中有东西需要 add/commit,此时我想切换到 blog 分支中去,但是并不想对 master 分支执行 add/commit ,这个时候我们可以执行如下命令,先将当前分支中的文件储藏起来:
git stash
执行完 git stash 命令之后,再执行 git status ,我们发现此时 master 分支已经是干净的了,此时我们可以愉快的切换到 blog 分支中去了,切换到 blog 分支之后,我们发现 master 中的修改并没有干扰到 blog 分支,当我们完成了 blog 分支中的工作之后,再回到 master 分支,此时执行如下命令可以恢复刚刚储藏的数据:
git stash apply
上面这个命令执行完之后,master分支中的工作区中的文件就恢复了,此时执行git status就可以看到又有数据需要add/commit了。
我们也可将工作区储藏多次,这个时候我们可以执行如下命令来查看储藏:
git stash list
git stash apply
表示恢复最近一次储藏,如果我们想恢复到之前的某一次储藏,可以加上储藏的名字,如下:
$ git stash apply stash@{1}
还有一些其他的关于储藏的命令:
1.恢复储藏并出栈
$ git stash pop
执行效果和git stash apply一样,不同的是,这里执行完之后,会将栈顶的储藏移除。
2.删除某一个储藏
$ git stash drop stash@{2}
最后一个参数是指储藏的名字。