您可能听说过 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 不会存储以下文件:
- 未跟踪的文件 – 添加到用户代码库但尚未暂存的文件。
- 忽略的文件 – 在 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 社区博客