如何恢复已删除的 Git stash

GitGitBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Git stash 是一项强大的功能,它允许开发者临时保存工作进度,并在不提交更改的情况下在分支之间切换。然而,有时 stash 会被意外删除,让你不知道如何恢复它们。本教程将指导你完成恢复已删除的 Git stash 的过程,确保你能够重新访问重要的工作进度。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/rm("Remove Files") git/DataManagementGroup -.-> git/reset("Undo Changes") git/DataManagementGroup -.-> git/stash("Save Changes Temporarily") git/BranchManagementGroup -.-> git/reflog("Log Ref Changes") subgraph Lab Skills git/rm -.-> lab-417932{{"如何恢复已删除的 Git stash"}} git/reset -.-> lab-417932{{"如何恢复已删除的 Git stash"}} git/stash -.-> lab-417932{{"如何恢复已删除的 Git stash"}} git/reflog -.-> lab-417932{{"如何恢复已删除的 Git stash"}} end

Git Stash 简介

Git Stash 是 Git 中的一项强大功能,它允许你临时保存本地更改而无需提交。当你需要切换到不同的分支或任务,但又不想丢失当前工作目录中所做的更改时,这一功能特别有用。

什么是 Git Stash?

Git Stash 是一种 “隐藏” 本地更改的方式,包括已暂存和未暂存的修改,并在之后重新应用这些更改。当你需要在任务或分支之间快速切换,而无需提交当前工作时,这尤其有帮助。

何时使用 Git Stash?

在以下场景中你可能想要使用 Git Stash:

  1. 切换分支:当你需要切换到不同的分支,但当前分支有一些未提交的更改时。
  2. 应用补丁:当你需要将补丁或热修复应用到生产分支,但本地分支有一些正在进行的更改时。
  3. 清理工作区:当你想要通过丢弃本地更改来清理工作区,但又不想永久丢失这些更改时。

如何使用 Git Stash?

要使用 Git Stash,你可以按以下步骤操作:

  1. 隐藏你的更改:在终端中运行命令 git stash 来保存当前更改。
git stash
  1. 查看你的隐藏内容:使用命令 git stash list 查看已保存的隐藏内容列表。
git stash list
  1. 应用一个隐藏内容:要应用特定的隐藏内容,使用命令 git stash apply <stash_name>,其中 <stash_name> 是你想要应用的隐藏内容的名称。
git stash apply stash@{0}

通过使用 Git Stash,你可以有效地管理本地更改,并在任务或分支之间切换而不会丢失工作。

删除 Git Stash

虽然 Git Stash 是一项实用的功能,但有时你可能想要删除特定的 stash,甚至清空整个 stash 列表。本节将指导你完成删除 Git stash 的过程。

删除特定的 stash

要删除特定的 stash,你可以使用 git stash drop 命令,后跟 stash 引用。例如,要删除最新的 stash(stash@{0}):

git stash drop stash@{0}

如果你想删除不是最新的 stash,可以先使用 git stash list 列出所有 stash,然后使用适当的 stash 引用进行删除。

git stash list
## stash@{0}: WIP on master: 049d078 added the index file
## stash@{1}: WIP on master: c264051 Merge branch 'experiment'
## stash@{2}: WIP on master: 21d80a5 updated the gemfile
git stash drop stash@{1}

清空整个 stash 列表

如果你想删除仓库中的所有 stash,可以使用 git stash clear 命令:

git stash clear

这将从你的仓库中删除所有 stash,有效地清空你的 stash 列表。

注意事项

  • 删除 stash 是一个永久性操作,所以在删除之前确保你不再需要 stash 中的更改。
  • 如果你不小心删除了一个 stash,你可以尝试使用 git fsck 命令恢复,但不能保证一定能恢复。
  • 定期查看和清理你的 stash 列表,使其保持有序且易于管理,这通常是个好习惯。

通过了解如何删除 Git stash,你可以有效地管理仓库的 stash 历史记录,并维护一个干净、有序的开发环境。

恢复已删除的 Git Stash

在某些情况下,你可能会意外删除仍需要的 Git stash。幸运的是,只要未进行垃圾回收,Git 提供了一种恢复已删除 stash 的方法。

恢复已删除的 stash

要恢复已删除的 stash,你可以使用 git fsck 命令查找丢失的 stash,然后重新应用它。

  1. 首先,运行 git fsck 命令列出仓库中所有悬空的提交:
git fsck --lost-found

这将显示所有悬空提交的列表,其中可能包括你已删除的 stash。

  1. 在输出中查找你要恢复的 stash。该 stash 将显示为带有哈希值的 “悬空提交”。

  2. 确定 stash 后,你可以使用 git stash apply 命令应用它,后跟 stash 的哈希值:

git stash apply <stash_hash>

<stash_hash> 替换为你要恢复的 stash 的哈希值。

注意事项

  • 只有在 stash 尚未进行垃圾回收时,git fsck 命令才有效。垃圾回收是 Git 用于从仓库中删除无法访问的对象(包括已删除的 stash)的过程。
  • 如果 stash 已进行垃圾回收,则可能无法恢复它。在这种情况下,你需要依靠自己的备份或版本控制系统来恢复丢失的更改。
  • 定期查看和管理你的 Git stash 列表是个好习惯,以避免意外删除重要更改。

通过了解如何恢复已删除的 Git stash,即使你不小心删除了 stash,也能确保不会丢失有价值的工作。

总结

在本全面指南中,你已经学会了如何有效地恢复已删除的 Git stash。通过了解恢复丢失的 stash 的过程,你可以维护 Git 仓库的完整性,并确保你宝贵的工作永远不会丢失。掌握这些技术将帮助你成为更熟练的 Git 用户,并简化你的开发工作流程。