在Git中处理多个分支时,很容易意外地开始在错误的分支上工作,然后才意识到需要切换到另一个分支。 有时您可能正在使用某个功能,而当有人要求您修复紧急错误而您需要跳到另一个分支时,您还没有准备好提交更改。 这是Git的stash
命令有用的地方。
创建和应用隐藏条目
存放使我们可以将未提交的更改的副本保存在当前工作分支上。
git stash
命令以最简单的形式创建一个存储项。 要在以后重新应用隐藏的更改,我们可以使用git stash apply
。
创建一个存储:
git stash
将隐藏条目应用于当前的工作分支:
git stash apply
我们可以将隐藏条目应用到其他分支–不必是我们从中创建隐藏的分支。
隐藏未跟踪的文件
默认情况下, git stash
将仅存储跟踪的文件。 如果我们要创建或应用包含未跟踪文件 (例如,先前尚未暂存的文件或.gitignore中的文件)的隐藏条目,则可以在我们的目录中添加-u
(或--include-untracked
)标志命令:
创建一个包含未跟踪文件的隐藏条目:
git stash -u
要应用包括未跟踪文件的隐藏条目:
git apply -u
多个隐藏条目
git stash apply
会将您创建的最后一个stash条目应用于当前工作分支。 但是可以同时存储多个存储,并分别应用它们。 要列出所有存储项,请使用git stash list
。 这将显示一个看起来像这样的列表:
git stash list
stash@{0}: WIP on my-branch: ca96af0 Commit message 3
stash@{1}: WIP on my-branch: 03af20c Commit message 2
stash@{2}: WIP on my-branch: 216b662 Commit message 1
默认情况下,存储条目的名称为WIP(进行中的工作),后跟分支,并提交创建存储条目的提交。 如果我们有多个存储项,这可能不是很有用–很难知道我们将应用哪些更改! 取而代之的是,我们可以使用自定义消息来保存存储,因此更容易了解其含义:
git stash save 'my brand new stash'
现在,当我们列出存储项时,我们将看到自定义消息,而不是通用消息:
git stash list
stash@{0}: On my-branch: my brand new stash
stash@{1}: WIP on my-branch: ca96af0 Commit message 3
stash@{2}: WIP on my-branch: 03af20c Commit message 2
stash@{3}: WIP on my-branch: 216b662 Commit message 1
要应用列表中的特定存储项,我们可以使用apply命令对其进行引用:
git stash apply stash@{2}
(用我们希望使用的任何隐藏引用替换最后一部分。)
随后的存储条目将添加到存储列表的开头。 最新的存储将具有参考stash@{0}
。
存储列表可以包含来自不同分支的存储条目,这些条目可以分别应用于项目中的其他分支。
应用与弹出
应用存储条目会将副本保留在存储列表中-因此我们可以将同一存储条目应用于多个分支。 如果我们在应用git stash list
后运行git stash list
,我们将看到应用的存储仍然存在。
列出我们目前所有的藏匿处:
git stash list
如果要在应用时从列表中删除隐藏条目,则可以使用pop
而不是`apply:
git stash pop
这与apply
相似,在默认情况下它将弹出最后一个存储项,或者我们可以弹出单个存储:
git pop stash@{2}
如果您知道不需要在其他任何分支上应用存储条目,并且希望保持存储列表的整洁美观,则弹出可能是一个好主意。
创建一个带有存储的新分支
我们可以将branch
用于新分支,并应用最新的存储条目:
git stash branch
这基本上是以下操作的快捷方式:
git checkout -b my-new-branch
git stash apply
同样,如果您希望应用其他条目,则可以引用特定的存储条目:
git stash branch stash@{2}
删除和清除藏匿处
保持干净的存储并删除我们不再需要的存储条目是一个好主意,尤其是在分支之间移动时。 如果我们只有很少的藏匿处而不是数百个藏匿处,那么生活将会简单得多! 另外,一旦提交了更改,我们实际上并不需要这些存储。
我们可以使用drop
命令从存储列表中删除单个存储。 与pop
和apply
,默认情况下,这将影响最新的存储项。 如果您要定位特定的存储,则可以将其传递给存储参考:
git stash drop stash@{2}
另外,我们可以一次清除所有存储项:
git stash clear
翻译自: https://css-irl.info/how-git-stash-can-help-you-juggle-multiple-branches/