Git Stash

17 Mar 2025 | 6 分钟阅读

有时您想切换分支,但您正在处理当前项目未完成的部分。您不想提交未完成的工作。Git stash 允许您这样做。git stash 命令允许您在不提交当前分支的情况下切换分支。

下图演示了 stash 相对于存储库和工作目录的属性和作用。

Git Stash

通常,stash 的意思是“将某些内容安全地存储在一个隐藏的地方”。Git 中 stash 的含义也与 stash 相同;Git 暂时安全地保存您的数据,而无需提交。

Stashing 获取工作目录的混乱状态,并暂时保存它以供将来使用。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

Stashing 工作

让我们通过一个实时的场景来理解它。我已经在两个不同的分支中对我的项目 GitExample2 中的两个文件进行了更改。我处于混乱状态,而且我还没有完全编辑任何文件。因此,我想暂时保存它以备将来使用。我们可以 stash 它来保存它的当前状态。要 stash,让我们看看存储库的当前状态。要检查存储库的当前状态,请运行 git status 命令。git status 命令的使用方法是

语法

输出

Git Stash

从上面的输出中,您可以看到状态,存储库中提供了两个未跟踪的文件 design.cssnewfile.txt。要暂时保存它,我们可以使用 git stash 命令。git stash 命令的使用方法是

语法

输出

Git Stash

在给定的输出中,工作使用 git stash 命令保存。我们可以检查存储库的状态。

Git Stash

正如您所看到的,我的工作只是存储在其当前位置。现在,目录已清理。此时,您可以在分支之间切换并在其上工作。

Git Stash Save(使用消息保存 Stash)

在 Git 中,可以使用消息存储更改。要使用消息存储更改,请运行以下命令

语法

输出

Git Stash

上面的 stash 将使用消息保存

Git Stash List(检查已存储的 Stash)

要检查已存储的 stash,请运行以下命令

语法

输出

Git Stash

在上述情况下,我已经进行了一个 stash,显示为“stash@{0}: WIP on the test: 0a1a475 CSS 文件”。

如果我们有多个 stash,那么它将分别显示所有 stash,并带有不同的 stash id。考虑以下输出

Git Stash

它将显示所有 stash,并带有索引,如 stash@{0}: stash@{1}: 等等。

Git Stash Apply

您可以使用 git stash 命令重新应用您刚刚 stash 的更改。要应用提交,请使用 git stash 命令,后跟 apply 选项。它的用法是

语法

输出

Git Stash

上述输出恢复了最后一个 stash。现在,如果您将检查存储库的状态,它将显示对文件所做的更改。考虑以下输出:

Git Stash

从上面的输出中,您可以看到存储库在 stash 之前已恢复到之前的状态。它显示输出为“未暂存的提交更改”。

如果有多个 stash,您可以使用“git stash apply”命令,后跟 stash 索引 id 来应用特定的提交。它的用法是

语法

考虑下面的输出

输出

Git Stash

如果我们没有指定 stash,Git 会选取最近的 stash 并尝试应用它。

Git Stash Changes

我们可以跟踪 stash 及其更改。要查看 stash 前后文件中的更改,请运行以下命令

语法

上述命令将显示已 stash 的文件及其所做的更改。考虑以下输出

输出

Git Stash

上面的输出说明了有 2 个文件已被 stash,并且在它们上执行了 2 次插入。

我们可以准确地跟踪对文件所做的更改。要显示文件的更改内容,请执行以下命令

语法

在这里,-p 代表部分 stash。给定的命令将显示已编辑的文件和内容,请考虑以下输出

输出

Git Stash

上面的输出显示了带有已更改内容的文件名。它的作用与 git diff 命令相同。git diff 命令也将显示确切的输出。

Git Stash Pop(重新应用 Stashed 更改)

Git 允许用户使用 git stash pop 命令重新应用之前的提交。pop 选项从 stash 中删除更改并将它们应用到您的工作文件中。

git stash pop 命令与 git stash apply 非常相似。这两个命令之间的主要区别在于 stash pop 命令在应用后从堆栈中删除 stash。

语法

上面的命令将重新应用之前的提交到存储库。考虑以下输出。

输出

Git Stash

Git Stash Drop(取消 Stash)

git stash drop 命令用于从队列中删除 stash。通常,它会删除最近的 stash。在使用 stash drop 命令之前应谨慎,因为一旦应用就很难撤消。

撤消它的唯一方法是,在删除 stash 后,您没有关闭终端。stash drop 命令的使用方法是

语法

输出

Git Stash

在上面的输出中,最近的 stash (stash@{0}) 已从给定的三个 stash 中删除。stash list 命令列出了队列中所有可用的 stash。

我们也可以从队列中删除特定的 stash。要从可用的 stash 中删除特定的 stash,请在 stash drop 命令中传递 stash id。它将被处理为

语法

假设我的队列中有两个 stash 可用,而且我不希望删除我最近的 stash,但我想删除旧的那个。然后,它将这样操作

考虑下面的输出

Git Stash

在上面的输出中,提交 stash@{1} 已从队列中删除。

Git Stash Clear

git stash clear 命令允许一次性删除所有可用的 stash。要删除所有可用的 stash,请操作以下命令

语法

它将删除存储库中存在的所有 stash。

输出

Git Stash

在上面的输出中,所有 stash 都已删除。git stash list 命令为空,因为存储库中没有可用的 stash。

Git Stash Branch

如果您在特定分支上 stash 了一些工作并继续在该分支上工作。然后,它可能会在合并期间创建冲突。因此,最好在单独的分支上 stash 工作。

git stash branch 命令允许用户在单独的分支上 stash 工作以避免冲突。此分支的语法如下

语法

上面的命令将创建一个新分支并将 stash 的工作转移到该分支上。考虑以下输出

输出

Git Stash

在上面的输出中,stash 的工作已转移到一个新创建的分支 testing。它将避免在主分支上出现合并冲突。


下一个主题Git Ignore