开发中当处于一个 branch 的时候, 需要切换 branch 但不想 commit , or 需要在当前 branch 暂时搁置当前修改, 处理一些紧急事件的时候. 这时候会发现 git stash 是一个非常好, 非常实用的命令.
用法如下:
将当前未提交的文件全部加进stash暂存:
git stash
执行完毕之后, 你的工作区将会是clean的, 我们在这里做一次pull --rebase的操作确保获取的是最新的代码之后, 就可以开始修改代码了 .
当紧急事件处理完毕->commit->push之后, 执行:
git stash pop
或者
git stash apply
就可以恢复我们刚刚放进stash区的未提交代码, 恢复后处于未提交状态, 也不是stage状态, 除非在stash之前先做了 git add 操作.
一些高级用法:
上面所说的 pop 和 apply 命令可以恢复上一次stash操作时放进stash区的代码.
那么要恢复某一次stash操作暂存的代码怎么办呢?
首先, 我们需要查看stash暂存区的每一次stash记录:
git stash list
查询出来的结果是类似这样的:
1 stash@{ 0}: WIP on branchA: 5049768 commit4: 3.0dev compact bug fix2 stash@{ 1}: WIP on branchA: d08a0ad commit3: 3.0dev compact bug fix3 stash@{ 2}: WIP on branchA: d08a0ad commit2: 3.0dev compact bug fix4 stash@{ 3}: WIP on branchA: 2ce95c1 commit1: 3.0dev compact bug fix
这时候如果我需要回到branchA中commit2这一次提交之后做的修改,
使用如下命令:
git stash apply stash@{ 2}
如果我发现其中stash ID 为 stash@{3} 的这一次修改我不想要了,
使用如下命令:
git stash drop stash@{ 3}
当我们完成一个阶段的工作的时候, 所有stash区里的代码都已经 commit 并且 push 了, 此时留着那些缓存也没什么用处, 那就清理下stash区吧,
使用如下命令:
git stash clear
以上差不多就是git stash的一些常用的命令. 日常开发中使用完全够用了.