有时你想切换分支,但你正在处理当前项目的一个未完成部分。你不想对半成品进行提交。Git 缓存允许你这样做。git stash 命令使你能够在不提交当前分支的情况下切换分支。
下图展示了关于存储库和工作目录的属性和作用。
一般来说,stash的意思是 “把东西安全地存放在一个隐蔽的地方”。在Git中,储藏室的意义也是如此;Git在不提交的情况下暂时安全地保存了你的数据。
储藏把你的工作目录的混乱状态,暂时保存起来以便进一步使用。git stash有许多选项。下面给出了一些有用的选项。
- Git stash
- Git stash save
- Git stash list
- Git stash apply
- Git stash changes
- Git stash pop
- Git stash drop
- Git stash clear
- Git stash branch
暂存工作
让我们通过一个实时场景来理解它。我对我的项目GitExample2在两个不同的分支中的两个文件进行了修改。我现在处于一个混乱的状态,还没有完全编辑任何文件。所以我想把它暂时保存起来,以便将来使用。我们可以把它藏起来,保存为其当前状态。为了藏匿,让我们看一下版本库的当前状态。要检查版本库的当前状态,运行git status命令。git status 命令的使用方法是。
语法:
$ git status
输出:
从上面的输出中,你可以看到在仓库中有两个未跟踪的文件design.css和newfile.txt。为了暂时保存它,我们可以使用git stash命令。git stash 命令的使用方法是。
语法:
$ git stash
输出:
在给出的输出中,工作是用git stash命令保存的。我们可以检查版本库的状态。
正如你所看到的,我的工作只是藏在当前位置。现在,目录已经清理完毕。在这一点上,你可以在不同的分支之间切换,并对它们进行工作。
Git Stash 保存 (保存Stash并指定信息):
在Git中,变化可以用消息来存储。要想用消息隐藏一个改动,请运行下面的命令。
语法:
$ git stash save ""
输出:
上述藏品将被保存,并附有信息
Git Stash列表(检查已缓存的Stash)
要检查存储的藏品,请运行以下命令。
语法:
$ git stash list
输出:
在上述情况下,我做了一个藏品,显示为 “stash{0}。测试中的WIP。0a1a475 CSS文件”。
如果我们有一个以上的储藏室,那么它将分别以不同的储藏室ID显示所有的储藏室。请看下面的输出。
它将显示所有索引为stash{0}: stash{1}: 等的存储区。
Git Stash重新应用
你可以通过使用 git stash 命令来重新应用你刚刚藏匿的修改。要应用提交,请使用git stash命令,后面加上apply选项。它的用法是:。
语法:
$ git stash apply
输出:
上面的输出恢复了最后的储存库。现在,如果你要检查版本库的状态,它会显示对文件所做的修改。考虑一下下面的输出。
从上面的输出中,你可以看到版本库已经恢复到储藏前的状态。它的输出显示为 “Changes not staged for commit”。
如果有一个以上的储藏室,你可以使用 “git stash apply “命令,后面跟着储藏室的索引ID来应用特定的提交。它的使用方法是
语法:
$ git stash apply <stash id>
考虑下面的输出。
输出:
如果我们没有指定一个储藏库,Git就会采用最近的储藏库并试图应用它。
Git Stash改变
我们可以跟踪藏匿和它们的变化。要看到文件在藏匿前和藏匿后的变化,请运行以下命令。
语法:
$ git stash show
上述命令将显示被藏匿的文件和对它们所做的修改。请看下面的输出。
输出:
上面的输出说明,有两个文件被藏起来了,并对它们进行了两次插入。
我们可以准确地跟踪文件上的变化。要显示文件的变化内容,请执行以下命令。
语法:
$ git stash show -p
这里,-p代表部分藏书。给定的命令将显示被编辑的文件和内容,考虑下面的输出。
输出:
上面的输出显示的是文件名和更改的内容。它的作用与git diff命令相同。git diff命令也会显示准确的输出。
Git 取出Stash (重新应用Stashed内容)
Git允许用户通过使用git stash pop命令来重新应用之前的提交。popping 选项将修改从储藏库中移除并应用到你的工作文件中。
git stash pop 命令与 git stash apply 很相似。这两个命令的主要区别是 stash pop 命令在应用后从堆栈中删除藏书。
语法:
$ git stash pop
上述命令将重新应用之前的提交到版本库中。请看下面的输出。
输出:
Git 丢弃Stash(Unstash)
git stash drop 命令是用来从队列中删除一个储藏库。一般来说,它会删除最近的藏书。在使用 stash drop 命令之前,应该小心谨慎,因为它一旦应用就很难撤销。
唯一的办法是在删除储藏室后不关闭终端,以恢复它。stash drop命令将被作为。
语法:
$ git stash drop
输出:
在上面的输出中,最近的一个储藏库(stash{0})已经从给定的三个储藏库中被丢弃。stash list命令列出了队列中所有可用的藏品。
我们还可以从队列中删除一个特定的储藏库。要从可用的储藏库中删除一个特定的储藏库,在stash drop命令中传递储藏库的ID。它将被处理为。
语法:
$ git stash drop <stash id>
假设我的队列中有两个可用的藏品,我不想放弃最近的藏品,但我想删除较早的藏品。那么,它将被操作为。
$ git stash drop stash@{1}
考虑下面的输出。
在上面的输出中,提交的stash{1}已经从队列中删除。
Git 清除Stash
git stash clear 命令允许一次性删除所有可用的储藏库。要删除所有可用的储藏库,请执行以下命令。
语法:
$ git stash clear
它将删除版本库中存在的所有存储空间。
输出:
在上面的输出中,所有的储藏库都被删除了。git stash list 命令是空白的,因为版本库中没有可用的储藏库。
Git Stash分支
如果你把一些工作藏在某一分支上,并继续在该分支上工作。那么,在合并过程中可能会产生冲突。所以,把工作藏在一个单独的分支上是好的。
git stash branch 命令允许用户将工作藏在一个单独的分支上,以避免冲突。这个分支的语法如下。
语法:
$ git stash branch <Branch Name>
上述命令将创建一个新的分支,并将储存的工作转移到该分支上。请看下面的输出。
输出:
在上面的输出中,隐藏的工作被转移到一个新创建的测试分支。这将避免主分支上的合并冲突。