Git Stash – 关于在 git 中存储更改的一切

有时,当我们在 git 中对项目进行更改时,我们意识到我们突然需要恢复到项目的最后一个干净的工作目录版本——这意味着没有应用本地更改的版本。例如,假设您最近将项目的一个版本克隆或提取到本地计算机,并对三个文件进行了一些本地更改。要将您的项目恢复到您克隆或拉取的版本,您可以运行以下命令:

git stash

这既可以保存您的更改,将它们存放在安全的地方,也可以恢复到项目的干净版本,然后您可以继续保存、编辑或做任何您喜欢的事情。大多数人都知道他们可以使用 来做到这一点git stash,但git stash我们也可以做一些其他的事情。说到git stash,您应该注意一些非常有用的命令:

  • git stash list
  • git stash show
  • git stash apply
  • git stash pop
  • git stash push
  • git stash clear
  • git stash drop

列出或显示所有 git stash 更改#

虽然我们可以轻松git stash地清理工作树,但我们也可以使用以下命令查看所有存储:

git stash list

有趣的是,这将显示过去发生的多个存储。因此,Git 会存储所有存储,以防您将来想要检索它们。例如,这是一个在运行后有很多存储的项目git stash list

stash@{0}: WIP on master: abf89a3 feat-ui: updated look and feel
stash@{1}: WIP on master: 39329d5 feat-ui: Updated CSS Quiz Button
stash@{2}: WIP on master: 46bc7aa feat-ui: Bug fix on article API
stash@{3}: WIP on master: 5dafc53 feat-ui: Fixed issue with secondary-navigation overflow

所有存储都存储在您ref/stash的文件.git夹中的文件中。git stash也可以通过以下方式查看最新的更详细视图git stash show

common.js      | 405 +--------------------------------------------------------
public/quiz.js | 267 +------------------------------------

虽然这对某些人来说很好,但可以通过运行以下命令来显示包括代码级别更改在内的更详细的视图:

git stash show -p

git stash show还有一些其他有用的选项:

  • -u--include-untracked, 以显示git show存储中的未跟踪文件,即git stash show -u
  • --only-untracked, 只显示git showstash 中未跟踪的文件,即git stash show --only-untracked

使用 apply 或 pop 恢复 git stash#

虽然知道已隐藏的内容本身很有用,但能够恢复存储也非常有用。要恢复最近的代码存储,您可以运行以下命令:

git stash apply

但是,如果您像我一样,并且有大量未使用的存储,则有时恢复以前的存储也很有用,例如stash@{3}, 或stash@{25},就像我们之前看到的列表中一样。在这些情况下,我们只需在命令后列出存储的编号。例如,要恢复stash@{25},我们将运行以下命令:

git stash apply 25

如您所料,如果您修改了文件,然后尝试git stash apply在顶部运行,您可能会遇到合并冲突。因此,请确保在运行此命令之前已处理好这些内容。

git stash apply 与 git stash pop

刚才,我们已经习惯git stash apply了恢复代码存储。这将获取我们隐藏的代码,并将其应用到我们的工作树之上。它还将您的代码的隐藏副本留在您的隐藏代码列表中 – 所以您不会丢失它。如果要恢复隐藏的代码,并从存储列表中删除该存储,则必须pop改用:

git stash pop

把你的藏匿处变成一个分支#

另一个未被git stash充分利用的有用的事情是它允许我们从隐藏的代码中创建一个新的分支。如果您有一些隐藏的代码,您可以将当前项目与其中的更改一起应用,将隐藏的代码应用到顶部,然后创建一个您喜欢的新分支。例如,以下将创建一个名为 的分支new-code

git stash branch new-code

保存 stash 和 git stash push 的其他方法#

虽然我们已经介绍了如何使用git stash来存储最新的代码,但您也可能会在野外看到以下命令:

git stash push

此命令实际上与 相同git stash,但如果您没有意识到这一点,可能会有些混乱。除此之外,还有git stash一些git stash push有用的选项,如果您希望使用它们:

  • -a--all, 将整个工作树保存到存储中,即git stash push -a
  • -S或者--staged,将仅保存使用添加的分阶段更改git add,即git stash push -S
  • -p--patch, 将允许您完成每个更改并有选择地决定是否要隐藏它,即git stash -p
  • -u或者--include-untracked,将所有未跟踪的文件与您的存储一起保存,即git stash push -u

使用 git stash 抑制消息

作为旁注,在这一点上提到几乎所有git stash命令都带有该-q选项是有道理的,该选项会抑制任何消息或错误:

git stash apply -q

删除你的藏匿处#

最后,有时您想删除整个存储。这有点危险,因此请谨慎使用,但如果您愿意,您只需运行:

git stash clear

如果您不想执行此类操作,但仍想删除特定的隐藏项,则可以运行git stash drop以删除最近隐藏的条目,或git stash drop 25删除结果中列出的stash@{25}隐藏项git stash list