理解 git stash:初学者概述

您可能听说过 git stash,但它到底是什么? 今天我们就来学习一下。 Git 很容易被认为是现代软件开发中最重要的技术之一。 它允许许多开发人员同时在软件上工作。

虽然像 push、pull、add commit 这样的基本 git 命令可以为单个维护者完成这项工作,但还有一些其他命令,例如 stash 和 reabse,如果您与许多开发人员合作,这些命令就变得非常重要。

在本模块中,我们将讨论 git 中的 stash 命令,并特别关注它的工作原理及其用例。

什么是 git-stash?

根据官方的git文档,

“当你想记录工作目录和索引的当前状态,但又想回到一个干净的工作目录时,请使用 git stash。 该命令保存您的本地修改并恢复工作目录以匹配 HEAD 犯罪。”

对于新用户来说,这个使用说明可能有点难以消化。 因此,让我们采取外行的方法来了解 git stash 的作用。

根据牛津词典,动词 stash 的意思是“将(某物)安全地存放在隐藏或秘密的地方。”

您可能已经猜到 Git stash 做了类似的事情。 但它不是隐藏对象,而是将 git 跟踪文件的更改存储在称为存储列表的隐藏位置。

它使未提交的更改隐藏在 git 跟踪系统中。 现在我们有了基本概念,让我们来理解技术术语:

具有未提交更改的目录称为脏目录。 git stash 将此更改存储/记录在隐藏目录中,并将其从实际目录中删除,使其干净。 由于存在未暂存的更改,因此 HEAD 指针现在指向最新的提交。

为什么我们需要 git stash?

Git 允许许多开发人员同时在不同的分支上工作。 可能会发生这样的情况:您正在一个分支(比如功能)上进行了一些更改,并且您需要在另一个分支中快速进行一些提交(比如错误修复)。

如果您在当前分支中有一些未提交的更改,则会发生奇怪的事情——未提交的更改从您当前的分支转移到您切换到的分支。

例如,来自功能分支的未提交工作将显示在错误修复分支中。 这有点令人讨厌和烦人! 但坚持下去还有更多意义。

您在错误修复分支中提交一些更改 Git 不会让您推送更改,因为该目录是脏的,即有一些未提交的更改。 因此,在推送更改之前,您被迫提交未完成的代码,这又是不可取的。

我们看到,如果您想同时在多个分支上工作,这些未提交的更改可能会让人头疼。 在这里 git stash 成为了救星,我们可以将这些未提交的更改隐藏起来,使存储库看起来很干净。 我们可以随时重新应用这些隐藏的更改。 现在我们已经了解了 git stash 如何帮助我们,是时候学习如何使用它了。

如何使用 stash 命令

Git stash 执行三个基本功能 – 存储更改并应用存储和删除存储。 在本节中,我们将讨论执行此操作的命令

1. 隐藏当前更改:

1. 要存储未提交的更改(暂存和未暂存),我们可以使用 git stash。

git stash 

2. Git 存储可能会令人困惑,因为它们仅由哈希数表示。 在我们再次应用它们之前,没有特别的方法可以知道它包含的更改。 要处理此类问题,您只需使用 -m 标志标记/命名存储。 stash 的这种命名对于处理多个 stash 非常有帮助。 命名 stash 的命令是:

git stash push -m "<stash name>" 

2. 应用存储:

Git 提供了很多处理 stash 的选项——

1. git stash apply 命令将所有 stash 应用到当前代码库。

git stash apply 

2. git pop 应用所有的 stash 并将它们从 stash 列表中删除。

git stash pop 

3. Git stash apply 和 pop 可能会派上用场,如果你有一个或一组你想要一起应用的提交。 要仅应用单个存储,我们可以使用以下命令

git stash apply [email protected]{n} 

其中 n 表示存储索引。 此命令为用户提供了更精细的控制。

4. 与前面的命令类似,还有一个 git 命令,它允许您从列表中弹出一个存储。 索引为 n 的 pop stash 命令是

git stash pop [email protected]{n} 

注意:git stash 索引从 0 开始,而不是 1。

3.删除隐藏

一些 stash 可能不再有用,您可以使用 git stash drop 删除它们。

1. 要删除索引为 n 的单个存储,请使用以下命令:

git stash drop [email protected]{n} 

2. 要删除整个存储列表,请使用以下命令:

git stash clear 

4. 进阶笔记:

默认情况下,Git stash 仅存储跟踪的文件,这包括对文件所做的所有暂存和未暂存更改。 但是 git stash 不会存储以下文件:

  1. 未跟踪的文件 – 添加到用户代码库但尚未暂存的文件。
  2. 忽略的文件 – 在 gitignore 文件中列出并被 git 忽略的文件。

要将未跟踪的文件添加到 git stash,请在 git stash 命令中使用标志 -u。 此存储将不包括被忽略的文件。

git stash -u -m "<stash-name>" 

要在存储中包含被忽略的文件,请使用标志 -a。 使用此标志创建的存储将包括跟踪、未跟踪和忽略的文件。

git stash -a -m "<stash-name>" 

结论

这让我们结束了关于 git stash 的文章。 现在你已经准备好让你的 git-fu 更有效。 请继续关注有关 git 和其他开源软件的更多文章。

参考

  • git stash 文档
  • git 社区博客