常用常见的 - stash pop 冲突时 list 还有 ¶
作者:KK
发表日期:2019.09.04
要点速读 ¶
git stash pop
内部其实是分成git stash apply
和git 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