那么当我们操作完成之后,想要还原刚才暂存起来的内容,这个时候应该怎么办呢?也有办法,我们只需要使用 git stash apply 或者是 git stash pop 这两个命令就可以将刚才暂存起来的内容还原了。但是这里有一个问题,就是 stash apply 和 pop 之间是不同的。这里涉及到 stash 内部的实现机制,stash 内部其实是通过堆栈实现的。pop 对于堆栈而言很明确,就是弹出的意思。也就是说如果我们使用的是 pop,那么当我们 pop 之后,这条记录会在堆栈当中删除。而如果使用的是 apply 呢,记录不会从堆栈当中删除,仍然会保留下来。一般情况下我使用 pop 多一些,但是 pop 也有缺点,比如 pop 没有办法选择应用的记录。我们可以使用 git stash list 来查看一下当前堆栈当中已经有的记录。如果我们使用 git stash pop 的话,默认的是应用的栈顶的记录,也就是 stash@{0}。但如果我们使用 stash apply 的话,我们可以自由选择我们想要应用的记录。比如如果我们想要应用最后一条记录的话,我们可以这样:
git stash apply stash@{2}
关于应用储存的修改也有一些细节,首先是储藏和修改对应的分支可以不同。我们可以在一个分支储藏,之后切换到另外一个分支进行应用。并且如果我们在应用之前修改了同样的内容的话,也会引起合并冲突。另外就是当我们应用储藏的时候,会发现我们之前add过的文件又重新回到了未暂存的状态。如果我们想要重新回到文件被暂存的状态时,我们可以使用 index 选项来执行。