git stach
应用场景
👉 当你我们正在一个分支开发某个功能时(还未完成),突然需要我们切换到其他分支上处理一些事情(比如修改bug),直接切换是不可以的,一种方法是我们可以将目前的改动提交,而我们此时并不想commit,我们就可以使用stash
将代码暂时 储藏 起来
保存当前代码
👉 快速储藏代码,默认储藏名称为"WIP on <branch_name> : <latest_commit_id> <latest_commit_message>"
# zsh快捷指令:gsta
git stash
添加储藏信息
git stash save "message"
查看stash代码
git stash list # 查看stash列表, zsh快捷指令:gstl
git stash show #查看第一个储藏做了哪些改动(并不是改动详情), zsh快捷指令:gsts
git stash show {num} # 查看其他储藏做了哪些改动
git stash show -p # 查看第一个储藏的改动
git stash show -p {num} # 查看其他储藏做的改动
应用stash代码(不会从stash列表删除)
git stash pop # 应用第一个储藏, zsh快捷指令:gstp
git stash pop {num} # 应用stash list中的第num个储藏
从stash列表删除
git stash drop # 删除第一个储藏, zsh快捷指令:gstd
git stash drop {num} # 删除stash list中的储藏,例如删除第二个:git stash drop stash@{1}
git stash clear # 删除所有储藏的stash, zsh快捷指令:gstc
误删stash怎么办 —— 万能的 CommitID
😵💫 一不小心删除了stash,在stash list
里也找不到了,怎么办?别急~😜
git stash drop
出的stash
是可以找回的,因为每次 git stash
都会生成一个新的 commit
,只要知道 commitID
, 通过 git stash apply {commitID}
就可以应用之前的 stash
寻找commitID有两种方法
git stash drop
最后会打印出pop掉的commitid
值,若这个记录还存在直接使用即可。
git fsck --lost-found
, 会打印出所有dangling commit
,但是这样看的话是看不出任何有用信息的,我们需要另外一条命令将其内容show出来。git show {commitId}
以stash储藏创建一个分支
git stash branch {branchName} {num} # 创建新分支branchName,并切换到此分支,分支的状态与stash储藏时的状态一致,此时新分支应用的stash代码进了暂存区
注意事项
git stash信息存储到哪了?
项目路径下的.git文件中存储着版本管理的所有信息,在文件 .git/log/refs/stash
中可以看到全部的 stash 记录信息
新增文件(不是新增代码)时,git stash并不会储藏新增的文件?
没有在git 版本控制中的文件,是不能被git stash 存起来的 ,此时需要先执行下git add 将新增文件加到git版本控制中,然后再git stash就可以了
如何只保存某些文件?
总共分3步:
- add 那些你不想备份的文件:git add file1.js, file2.js;
- 用
git stash --keep-index
:只会保存那些没有被add的文件; git reset HEAD
,将暂存区的修改重置到工作区继续coding
git stash push
git stash push -m "message"
等同于git stash save "message"
git stash push dir/file.js
可以指定储藏路径(即上面的问题-只保存某些文件,git stash save
无此功能)