Git 暂存



git stash 命令用于在不提交的情况下保存工作,通过临时存储工作目录中尚未准备好提交的更改。

这有助于我们在活动之间切换或暂时搁置未完成的修改,而无需堆积提交历史。

它允许我们撤销自上次提交以来在索引和工作目录中所做的所有更改,将我们的工作目录恢复到其原始状态。

主要特点

临时保存工作 - 暂存和未暂存的更改都可以临时保存。

多个暂存 - 可以保存多组更改,并以任意顺序重新应用。

暂存列表 - 可以一次查看所有暂存更改的列表。

应用暂存 - 稍后可以使用applypop选项应用暂存的更改。git stash pop在应用更改后会删除暂存。

暂存特定更改 - 只能暂存更改的一部分。

暂存默认使用“WIP on branchname...”标签创建,但我们可以添加更具信息性的语句。

  • 可以使用 reflog 表示法(stash@{1}stash@{2.hours.ago}等)检索旧的暂存,最新的暂存保存在refs/stash中。

  • 此外,可以通过索引stash@{n}访问暂存,其中{n}是暂存编号。

命令

暂存更改的通用命令是git stash

git stash

push

命令git stash push删除索引和工作目录中最近的修改,并将它们存储在一个新的暂存中。

  • 我们可以选择向暂存添加详细的<message>以指示其中包含的内容。

  • 删除push限制非选项参数以避免意外暂存,但允许快速快照。

  • 命令git stash -p允许交互式选择要暂存的修改;它是git stash push -p的快捷方式。

  • 可以在--之后放置路径规范组件,以更清楚地说明要暂存哪些文件或修改。

save

命令git stash save已弃用,应替换为git stash push

git stash save
  • git stash push相反,git stash save不支持指定单个文件(路径规范)。

  • 传递给git stash save的任何其他输入都将连接起来以生成暂存消息,而不是路径规范。

list

运行git stash list将显示当前所有保存的暂存条目。

git stash list
  • 每个暂存条目按顺序命名为stash@{n},其中stash@{0}表示最新的暂存。

  • 它显示创建每个暂存时正在使用的分支名称。

  • 每个暂存条目都包含作为其基础的提交的简要摘要。

show

git stash show命令显示暂存条目中记录的更改。

git stash show
  • 默认情况下,它显示更改摘要(diffstat),但使用<diff-options>,它可以使用git diff支持的任何格式显示实际更改。

  • 控制统计信息和补丁显示默认行为的配置变量包括stash.showStatstash.showPatch

  • 显示暂存更新时,stash.showIncludeUntracked设置控制是否默认启用--include-untracked

apply

命令git stash apply将暂存中的更改应用于当前的工作树和索引(暂存区)。

git stash apply
  • 它不会像git stash pop那样从暂存列表中删除暂存。

  • 我们可以使用任何类似于git stash pushgit stash create生成的暂存的提交,或者通过提供其名称(stash@{n})来指定特定的暂存条目。

  • 要更安静地操作并减少输出冗余,请使用-q--quiet

branch

从创建<stash>的提交开始,创建一个名为<branchname>的新分支。

git stash branch
  • 使用存储的修改更新工作树和新分支的索引。

  • <stash>stash@{<revision>}格式输入时,应用后会删除该暂存。

  • 非常适合快速分支带有暂存的更改,尤其是在由于冲突导致简单的git stash apply变得复杂时。

clear

git stash clear命令将删除暂存中的所有条目。

git stash clear
  • 这些条目在删除后容易被剪切,可能无法恢复。

drop

git stash drop命令将从暂存条目列表中删除一个暂存记录。

git stash drop
  • 要抑制确认消息,请将其与-q--quiet选项结合使用。

create

命令git stash create生成一个名为暂存条目的普通提交对象,并在不将其保存到 ref 命名空间的情况下返回其对象名称。

git stash create
  • git stash push相比,此功能使用频率较低,主要用于脚本编写目的。

store

git stash store命令通过将使用git stash create创建的暂存(一个悬空合并提交)存储到暂存 ref 中来修改暂存 reflog。

git stash store
  • 通常情况下,git stash push更适合于生成和存储暂存。

  • 此命令主要用于脚本编写目的,不直接使用。

选项

git stash命令支持以下选项

-a

--all

  • 当与git stash pushgit stash save结合使用时,-a--all选项将暂存所有更改,包括暂存、修改和未跟踪的文件,包括通常被忽略的文件。

  • 它还使用git clean在暂存后清理未跟踪的文件。

-u

--include-untracked

--no-include-untracked

  • -u / --include-untracked - 当与git stash pushgit stash save结合使用时,将暂存所有更改、暂存和未跟踪的文件,包括通常被忽略的文件。

    然后使用git clean清理它们。

    当与git stash show结合使用时,在暂存条目的差异中显示未跟踪的文件。

  • --no-include-untracked - 与-u相反,此命令防止在使用上述命令时在差异中显示或暂存未跟踪的文件。

--only-untracked

  • 仅显示暂存条目中的未跟踪文件作为差异的一部分;仅限于git stash show命令。

--index

  • 当与git stash popgit stash apply命令结合使用时,它会尝试将修改重新应用到索引(暂存区)以及工作树。

-k

--keep-index

--no-keep-index

  • 当与git stash pushgit stash save结合使用时,选项-k / --keep-index :- 仅暂存未暂存的更新,同时保留已添加到索引(暂存区)的所有更改。

  • 与-k相反,当与上述命令结合使用时,--no-keep-index会暂存所有修改,包括已在索引中的修改。

git stash临时暂存工作目录中的所有更改。可以在需要时重新应用暂存的更改。

广告