>> >> >> Reference << << << <<<<<<Ref>>>>>>
stash
Modified: 2025-12-31 | Author:ljf12825

git stash是Git中用来保存当前工作进度并清理工作目录的命令,通常在你正在做某项工作时,突然需要切换到其他分支去处理紧急任务,而不想提交当前的修改。git stash会将这些未提交的更改保存起来,使你可以切换到其他分支,然后再恢复之前的工作

基本用法

  1. 保存当前的更改 使用git stash来保存当前工作目录和暂存区的所有更改
git stash
  1. 查看保存的更改 你可以通过git stash list查看当前所有的stash项目:
git stash list

输出示例:

stash@{0}: WIP on master: 9a8d2ab 修改了文件A
stash@{1}: WIP on feature_branch: d3c5a9e 修改了文件B
  1. 恢复已保存的修改 你可以使用git stash pop来恢复最后一次保存的修改,并且删除该stash项
git stash pop

如果你只想恢复某个特定的stash项目,可以指定他:

git stash pop stash@{1}

如果你只想恢复更改但不删除它,可以使用git stash apply

git stash apply

同样可以指定某个特定的stash项目:

git stash apply stash@{1}
  1. 删除已保存的更改 有时你不需要恢复某个stash项目,只想将它删除,可以使用git stash drop
git stash drop stash@{0}

要删除所有stash项目:

git stash clear
  1. 保存部分更改 默认情况下,git stash会保存工作目录和暂存区的所有修改。如果你只想保存工作目录的更改,可以使用:
git stash -k # --keep-index

如果你只想保存暂存区的更改而不包括工作目录的修改,可以使用:

git stash -u # --include-untracked
  1. 查看更改 如果你想查看某个stash项的具体内容,可以使用git stash show,并加上-p来查看详细的差异:
git stash show -p stash@{0}

stash的本质

git stash将会把当前工作目录和暂存区的更改(包括修改和新增文件)保存到Git的内部存储区域,这个区域不属于任何分支,它是一个特殊的引用,保存在.git目录下的一个栈结构中

具体来说,git stash会将修改保存到以下位置:

  1. 内部存储:
  1. Git的栈结构:
  1. 存储的内容: