鲜为人知但功能强大的 Git 技术
Stashing 允许您保留对存储库所做更改的副本,而无需创建提交。
如果您正在切换上下文,这非常有用,尤其是当您在同一个项目的不同错误或任务之间来回切换时。
gitstash 的基本操作
在处理并行工作时,您可以使用 git stash 来简化您的工作流程。想象一下,您正在处理一项长期运行的任务,并在本地工作副本中进行了更改。然后,出现紧急情况,您必须立即处理。
stashing 更改的标准工作流程是:
- 进行本地更改
- 存储本地更改
- <其他作品>
- 重新应用隐藏的更改
当您使用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 的一小部分,它是一个提供很多东西的程序。