【VSCode Git】stage和stash的区别
问题来源
用vscode提交变更的文件时,会发现2个相似的选项“Stage Changes”和“Stash Changes”
,乍一看不知道用哪个,它们有什么区别呢?
解析
- 先从单词释义看
- stage是“阶段”,在Git中的含义是暂存区,由此可以推断,它的意思是将变更的文件放入暂存区。
- stash是“藏匿”,也含有存放的意思,那么是存到哪里呢?
- 从单词释义看不出stash的作用,就翻 Git的官方文档 吧
- 从文档里找到了这么一段描述:Use git stash when you want to record the current state of the working directory and the index, but want to go back to a clean working directory. The command saves your local modifications away and reverts the working directory to match the HEAD commit.
- 这段话的意思是,如果你想要记录当前文件状态,又想让工作目录回到干净的状态,就使用
git stash
命令。比如,当前分支有一些修改,但是不想提交,又要切换到另一个分支做一些事,这时就需要把当前的文件变更“藏”起来,也就用到了“Stash Changes”,等价于git stash
。
应用场景
- Stage Changes相当于
git add xxx
。可以多选,批量地将变更文件放入暂存区,比git add .
好用。 - Stash Changes相当于
git stash
,将选中的变更文件“藏起来”,然后当前分支就“干净”了,可以切换到其他分支去了。- 那么藏起来的内容怎么恢复呢?
- 回到刚才执行
git stash
的分支,执行git stash pop
,就会将最近一次藏起来的内容提取出来了。(注:如果stash了好几次,要提取其中某一次的内容,可以先使用git stash list
拿到stash列表,找到那次的index,然后执行git stash apply [index]
命令提取出那一次存放的变更内容,如下图)