Git stash命令详解和使用

Posted cj_eryue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 stash命令详解和使用的主要内容,如果未能解决你的问题,请参考以下文章

Git命令详解(git statusgit loggit commitgit stash)

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

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

git 命令 git stash 和 git stash pop

使用git stash命令保存和恢复进度

git stash命令使用