git stash简介
git stash 是将本地修改的内容先暂存起来,并把代码再恢复成原来的样子; 在很多场景中非常的有用,比如你正在 分支a 此时功能才写了一半,此刻又要去分支b处理代码,此时就需要使用 stash将本地修改的暂存起来,暂存起来 等到事情处理完之后,再回来将stash暂存的记录恢复起来
暂存本地修改
git stash [save 记录信息]
- 暂存的记录是以堆栈的存储形式来存储的,堆栈遵循
先进后出
- 每个记录都有一个
id
,stash@{数字}
- 特别注意,
stash@{数字}
中 数字是不断递增的,从0
开始不断递增 - 每次新增一个记录,每个记录对应的
stash@{数字}
都会改变,因为是堆栈的形式,stash@{0}
永远给最新的一条记录,依次往下推算 stash@{数字}
可以作为唯一id
使用(比如后面恢复等操作可以基于stash@{数字}
来操作)
- 特别注意,
- 注意如果不加
git save
,那么就没有记录信息,会沿用最近一次的commit
的分支 - 如果添加了
save 记录信息
,后续的一些操作也可以基于名字来操作 - 建议每次都使用
save 记录信息
,相当于commit
的备注,可以非常明显的知道本次stash
的代码是哪些内容
查看暂存记录
# 查看所有暂存记录
git stash list
# 查看某个记录所有改动点
git show ['stash{数字}'] [-p]
git list
主要是产看所有的记录git show
主要查看某条记录的改动点(类似于git show
)- 默认情况下展示最新的一条记录
- 通过添加
id
来展示指定的记录的改动点id
必须用冒号包裹,否则不行git show 'stash@{数字}'
- 此处只能使用
id
,不能使用记录的信息
- 通过
-p
来显示详细的改动记录
恢复暂存记录
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}
就会自动消失
stash
分支可以在不同分支之间应用
当我们在分支a上面创建了一个stash-a,我们不仅可以基于stash-a
来创建分支
另外当我们切换到任意分支分支b/c/d
,都可以将stash-a
应用到分支b/c/d
上