git命令之git stash apply和 pop 的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git命令之git stash apply和 pop 的区别相关的知识,希望对你有一定的参考价值。

参考技术A apply 只会读取暂存区的数据,通过 apply 后,暂存区的数据仍然存在; 而 pop 是取出最新的一次暂存数据,取出后,这次数据就不会存在于暂存区中了。

Git stash命令详解和使用

目录

git stash

git stash list

git stash pop

git stash apply

git stash drop 

git stash clear

git stash show

git stash clear之后的恢复

保存特定文件


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命令

步骤

  1. git fsck --lost-found, 找出刚才删除的提交对象和文件对象, 里面是一个一个的 dangling commit commitId。

  2. git show commitId一个一个的查看修改的内容, 找到了我们需要恢复的commitId之后。

  3. 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 的区别的主要内容,如果未能解决你的问题,请参考以下文章

git命令之git stash 暂存临时代码

git stash pop 冲突怎么解决?

Git命令之stash

git stash 储藏

痞子衡嵌入式:第一本Git命令教程(7.1)- 清理之缓存(stash)

git stage 与git add 有啥区别