git stash 的使用与总结

206 阅读3分钟

git stash简介

git stash 是将本地修改的内容先暂存起来,并把代码再恢复成原来的样子; 在很多场景中非常的有用,比如你正在 分支a 此时功能才写了一半,此刻又要去分支b处理代码,此时就需要使用 stash将本地修改的暂存起来,暂存起来 等到事情处理完之后,再回来将stash暂存的记录恢复起来

暂存本地修改

git stash [save 记录信息]
  • 暂存的记录是以堆栈的存储形式来存储的,堆栈遵循先进后出
  • 每个记录都有一个idstash@{数字}
    • 特别注意,stash@{数字}中 数字是不断递增的,从0开始不断递增
    • 每次新增一个记录,每个记录对应的 stash@{数字}都会改变,因为是堆栈的形式,stash@{0}永远给最新的一条记录,依次往下推算
    • stash@{数字}可以作为唯一id使用(比如后面恢复等操作可以基于stash@{数字}来操作)
  • 注意如果不加 git save,那么就没有记录信息,会沿用最近一次的commit的分支
  • 如果添加了save 记录信息,后续的一些操作也可以基于名字来操作
  • 建议每次都使用save 记录信息,相当于commit的备注,可以非常明显的知道本次stash的代码是哪些内容

git-stash-save的操作.png

查看暂存记录

# 查看所有暂存记录
git stash list
# 查看某个记录所有改动点
git show ['stash{数字}'] [-p]
  • git list主要是产看所有的记录
  • git show主要查看某条记录的改动点(类似于git show
    • 默认情况下展示最新的一条记录
    • 通过添加id 来展示指定的记录的改动点
      • id 必须用冒号包裹,否则不行 git show 'stash@{数字}'
      • 此处只能使用id,不能使用记录的信息
  • 通过 -p 来显示详细的改动记录

git-stash-list-show.png

恢复暂存记录

git stash pop [id]
git stash apply [id]
  • 默认是恢复最近的一条记录
  • id必须用冒号包裹git stash pop 'stash@{0}'
  • 此处只能使用id,不能使用记录的名字
  • git stash pop id使用之后,那么暂存记录中就会把对应的id那条记录删除
  • git stash apply id使用之后,不会把暂存记录中对用的id那条记录删除

移除暂存记录

# 删除指定的记录
git stash drop [id]
# 删除所有的记录
git stash clear  
  • 默认是移除最新的一条记录
  • id必须用冒号包裹git stash drop 'stash@{0}'

与分支的关系

可以直接基于某个stash来创建分支

# 命令
git stash branch <branchname> [<stash>]
# eg
git stash branch bbb 'stash@{1}'

注意:通过上面的命令 能基于stash@{1}来创建一个名为bbb的分支;分支创建成功之后,stash@{1}就会自动消失

git-stash-创建branch.png

stash分支可以在不同分支之间应用

当我们在分支a上面创建了一个stash-a,我们不仅可以基于stash-a来创建分支 另外当我们切换到任意分支分支b/c/d,都可以将stash-a应用到分支b/c/d

参考连接