常用常见的 - stash pop 冲突时 list 还有

  • 作者:KK

  • 发表日期:2019.09.04


要点速读

  • git stash pop内部其实是分成git stash applygit stash drop两个命令来执行的,apply 遇到冲突失败了,所以没有 drop 掉贮藏。

正文

有时候执行git stash pop弹出贮藏时会发生冲突,一般我们就解决好冲突提交代码就是了,然后继续开发,下次有必要时再git stash产生新的贮藏,再下次把这个新的贮藏给pop出来(一般不会冲突)。

然而细心的朋友会发现,在pop之前先git stash list查看贮藏,嗯,比如有4个,然后执行git stash pop弹出来,此时如果发生了冲突,你list就会发现它依然是4个,解决冲突、提交后也依然是4个,为什么呢?


原因

因为git stash pop其实在内部是分成两个命令来执行的:

git stash apply #应用最新的一个贮藏
git stash drop  #删除新的一个贮藏

apply把贮藏应用的时候遇到了冲突,导致了命令的执行失败,所以就没有继续执行drop了。


因此 stash 会堆积

用的时间长了你会发现,git stash list能给你列出好几个贮藏,你可能用心一想“哎呀怎么可能,我每次 stash 起来,不久后也有 pop 出来使用呀,最近也没见着哪个功能漏了代码呀,怎么还有贮藏没有使用呢?”

其实就是在你 pop 遇到冲突的时候,它没有被 drop 掉,然后你解决冲突提交代码了,贮藏也遗留了,你没有漏掉任何代码,只是遗下了一个没 drop 的贮藏而已。

它也并没有影响你的基本使用,你下次 stash 又产生了新的贮藏,pop 如果没遇到冲突就正常删除了,于是剩下1个以前冲突时没删的贮藏。

再下次又 stash,pop 冲突时,这个新的又没被删掉,尽管解决了冲突提交了代码,但你已经累计遗留了2个冲突过的贮藏。

如果有洁癖的话,你可以在解决冲突提交代码后,手动执行一次git stash drop