储藏(Stashing)是一种鲜为人知但功能强大的 Git 技术,即使您还没有准备好提交它,它也能保证代码的安全。

Stashing 允许您保留对存储库所做更改的副本,而无需创建提交。

如果您正在切换上下文,这非常有用,尤其是当您在同一个项目的不同错误或任务之间来回切换时。

git stash 的基本操作

在处理并行工作时,您可以使用 git stash 来简化您的工作流程。想象一下,您正在处理一项长期运行的任务,并在本地工作副本中进行了更改。然后,出现紧急情况,您必须立即处理。

stashing 更改的标准工作流程是:

  1. 进行本地更改
  2. 存储本地更改
  3. <其他作品>
  4. 重新应用隐藏的更改

当您使用git stash [push]命令存储更改时,git 将重置为 HEAD。然后,您可以继续处理您需要的任何事情,提交到存储库,就好像您从未进行过原始更改一样。

一旦你首先完成了任何让你偏离轨道的事情,使用git stash pop应用你的更改并将它们从存储中删除。您还可以使用 git stash apply 应用您的更改并将它们保存在存储中。如果您想快速将更改应用到多个分支,这可能很有用。

使用多个 Stash

如果您真的很忙,您可能会发现自己同时处理多项任务,并且您可能需要将它们全部隐藏起来。别担心, git stash 就是为此而构建的。

每次使用 git stash push 时,都会保存另一组更改。使用git stash list显示您已隐藏的所有内容。你会看到有点像这样的东西:

stash@{0}: WIP on main: 2fba62e first commit
stash@{1}: WIP on main: 2fba62e first commit

这些消息不是很有用,但是您可以通过在存储时添加自定义消息来为自己留下一些线索:

git stash push -m "third"

当您现在列出时,您会看到您的自定义消息:

stash@{0}: On main: third
stash@{1}: WIP on main: 2fba62e first commit

显示记录变更的差异

要找出存储中发生的变化,请使用 git stash show。如果没有进一步的参数,它将显示最新存储的差异摘要,如下所示:

$ git stash show
README.md | 3 +++
1 file changed, 3 insertions(+)

您还可以传递存储 id 来查询特定条目:

git stash show stash@{0}

从 Stash 创建一个分支

您可能会认为存储中的更改非常重要,以至于它们应该放在自己的分支中。如果是这样,请使用分支命令从存储中创建一个新分支:

git stash branch

同样,默认情况下这将适用于最近的存储,但如果需要,您可以提供存储 id。Git 从存储库中的同一点创建新分支作为存储。然后它将存储中的更改应用到您的工作副本。

清理 Stash

没有“git unstash”命令。如果要删除存储条目,请使用 drop:

git stash drop

同样,这默认为最新的,但您可以提供一个存储 ID。如果您决定要摆脱 Stash 的所有内容,请使用以下命令:

git stash clear

使用 git stash 进行临时轻量级提交

Git 存储库远没有完整存储库强大。但是它们本身仍然提供许多有用的功能。如果您经常发现自己需要在工作中切换分支,那就请使用 stashes。

Stashing 只是 git 的一小部分,它是一个提供很多东西的程序。

发表评论