Git stash命令
有时候你想要切换分支,但是你正在进行当前项目的一个未完成的部分工作。你不想要提交一半完成的工作。Git 隐藏允许你这样做。 git stash 命令 允许你在不提交当前分支的情况下切换分支。
下图演示了关于仓库和工作目录的隐藏属性和作用。
一般来说,stash 的意思是 “将某物安全地存放在隐藏的地方”。在 Git 中,stash 也是一样的意思;Git 会临时保存你的数据,而不会进行提交。
Stash 命令会将你的工作目录的混乱状态进行临时保存,以备将来使用。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 进行了更改。我处于一个混乱的状态,还没有完全编辑任何文件。因此,我想将其暂时保存以备将来使用。我们可以使用 stash 命令将其保存为当前状态。为了进行 stash,让我们先查看仓库当前的状态。使用 git status 命令来检查仓库当前的状态,命令格式如下:
语法:
$ git status
输出:
从上面的输出中,你可以看到有两个未跟踪的文件 design.css 和 newfile.txt 在仓库中可用。为了暂时保存它们,我们可以使用git stash命令。git stash命令的用法如下:
语法:
$ git stash
输出:
在给定的输出中,使用git stash命令保存了工作。我们可以检查存储库的状态。
正如您所见,我的工作只是存放在它当前的位置。现在,目录已经清理完毕。此时,您可以在不同的分支之间切换并在它们上工作。
Git Stash Save(使用消息保存工作进度)
在Git中,可以使用消息保存更改。要带有消息保存更改,请运行以下命令:
语法:
$ git stash save ""
输出:
上述存储将保存一条消息
Git Stash列表(查看存储的存储)
要查看存储的存储,请运行以下命令:
语法:
$ git stash list
输出:
它将显示所有的储藏,并以索引的形式展示: 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>
考虑下面的输出: 输出:
如果我们没有指定一个stash,Git会取最近的stash并尝试应用它。
Git Stash更改
我们可以跟踪stash及其更改。要在stash操作之前和之后查看文件中的更改,请运行以下命令:
语法:
$ git stash show
上述命令将显示存储的文件以及对它们所做的更改。考虑下面的输出:
输出:
上面的输出显示有两个文件被存储,对其进行了两次插入操作。
我们可以准确追踪文件上所做的更改。要显示文件的更改内容,请执行以下命令:
语法:
$ git stash show -p
这里,-p 代表部分存储。给定的命令将显示编辑过的文件和内容,考虑下面的输出:
输出:
以上输出显示了具有更改内容的文件名。它的作用与git diff命令相同。 git diff 命令也会显示相同的输出。
Git Stash Pop(重新应用存储的更改)
Git允许用户使用git stash pop命令重新应用之前的提交。弹出选项会从stash中移除更改并应用到您的工作文件中。
git stash pop命令与git stash apply非常相似。这两个命令之间的主要区别是stash pop命令在应用之后会从堆栈中删除stash。
语法:
$ git stash pop
上述命令将重新应用以前的提交到存储库中。请看下面的输出。
输出:
Git Stash Drop(取消存储)
git stash drop 命令用于从队列中删除一个存储。通常情况下,它会删除最近的存储。在使用存储撤销命令之前应注意谨慎,因为一旦应用就很难撤销。
唯一撤销的方法是在删除存储之后不关闭终端。存储撤销命令用法如下:
语法:
$ git stash drop
输出:
在上述输出中,最新的存储(stash@{0})从给定的三个存储中被删除。stash列表命令列出队列中所有可用的存储。
我们也可以从队列中删除特定的存储。要从可用的存储中删除特定的存储,请在stash drop命令中传递存储ID。它将被处理为:
语法:
$ git stash drop <stash id>
假设我在我的队列中有两个可用的隐藏区(stash),我不想丢弃最近的隐藏区,但我想删除较早的隐藏区。那么操作如下:
$ git stash drop stash@{1}
考虑以下输出:
在上面的输出中,提交 stash@{1} 已从队列中删除。
Git Stash Clear
git stash clear命令允许一次性删除所有可用的存储。要删除所有可用的存储,请执行以下命令:
语法:
$ git stash clear
它将删除存储库中存在的所有存储。
输出:
所有的储藏(stash)都已在上述输出中删除。git stash list命令为空,因为存储的内容(stash)在仓库中不存在。
Git Stash 分支
如果你在特定分支上贮藏了一些工作并继续在该分支上工作,那么在合并时可能会产生冲突。因此,最好在一个单独的分支上贮藏工作。
git stash branch命令允许用户在一个单独的分支上贮藏工作以避免冲突。该分支的语法如下:
语法:
$ git stash branch <Branch Name>
上述命令将创建一个新的分支,并将存储的工作转移到该分支。考虑下面的输出:
输出:
在上面的输出中,存储的工作被转移到一个新创建的分支testing。这将避免主分支上的合并冲突。