git命令之git stash apply和 pop 的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git命令之git stash apply和 pop 的区别相关的知识,希望对你有一定的参考价值。
参考技术A apply 只会读取暂存区的数据,通过 apply 后,暂存区的数据仍然存在; 而 pop 是取出最新的一次暂存数据,取出后,这次数据就不会存在于暂存区中了。Git stash命令详解和使用
目录
stash 命令使用非常简单,是经常使用的命令
应用场景:
1 、临时存储已修改的代码:比如正在分支A上开发某个功能,还未完成,突然要切换到B分支上去修复一个bug。这时就可以用git stash命令将本地修改的内容保存至堆栈区,再切换到B分支修改bug,修复完成后,再切回到A分支,从堆栈中恢复刚刚保存的内容。
2 、同步代码:由于不小心,本来要在A分支上开发的功能代码,却写在了B分支上,这时就可以用git stash将本地代码保存至堆栈中,切回到A分支后,再次恢复内容即可。
git stash
保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。
当然,我们一般都是使用 git stash save '备注' 可以添加一些注释,方便查阅。
git stash list
显示保存进度的列表。也就意味着,git stash命令可以多次执行。
git stash pop
git stash pop 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。
git stash pop --index 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区)
git stash pop stash@1恢复指定的进度到工作区。stash_id是通过git stash list命令得到的
通过git stash pop命令恢复进度后,会删除当前进度。
git stash apply
git stash apply stash@stash_id
除了不删除恢复的进度之外,其余和git stash pop 命令一样。
git stash drop
删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度。
git stash clear
删除所有存储的进度。
git stash show
显示与当前分支差异
如:git stash show stash@
stash_id 加上 -p 可以看详细差异
git stash clear之后的恢复
如果我们使用git stash将已修改的一些文件储藏起来了, 然后使用git stash clear清除之后还可以恢复么?
答案是:可以。
首先请出我们的主角:git fsck命令。
步骤
-
git fsck --lost-found, 找出刚才删除的提交对象和文件对象, 里面是一个一个的 dangling commit commitId。
-
git show commitId一个一个的查看修改的内容, 找到了我们需要恢复的commitId之后。
-
git stash apply commitId直接恢复就可以了。
保存特定文件
方式一 (适合少数指定文件)
git stash -- filename
方式二(适合大量指定文件)
git stash -p
git stash -p
是一个交互式命令,会将已经更改的文件遍历,输入指定来决定处理方式,执行命令后,如下图:
需要stash的文件,我们就y
不需要stash需要commit的文件,我们就n
如果接下来没有需要stash的文件,则直接q退出就行.
将需要 stash 的文件全部暂存之后,就可以 commit 和push 剩下的代码了。
这里的[y,n,q,a,d,/,?]
分别代表的含义如下:
以上是关于git命令之git stash apply和 pop 的区别的主要内容,如果未能解决你的问题,请参考以下文章