跳到主要内容

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有两种方法
  1. git stash drop 最后会打印出pop掉的commitid值,若这个记录还存在直接使用即可。

git stash

  1. git fsck --lost-found, 会打印出所有dangling commit,但是这样看的话是看不出任何有用信息的,我们需要另外一条命令将其内容show出来。git show {commitId}

git stash

git stash

以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步:

  1. add 那些你不想备份的文件:git add file1.js, file2.js;
  2. git stash --keep-index:只会保存那些没有被add的文件;
  3. git reset HEAD,将暂存区的修改重置到工作区继续coding
git stash push
  1. git stash push -m "message" 等同于 git stash save "message"
  2. git stash push dir/file.js 可以指定储藏路径(即上面的问题-只保存某些文件,git stash save 无此功能)