git stash
工作区和暂存区的内容是公共的,不属于任何一个分支
所以在切换分支的时候务必保证工作区是干净的,否则切换过去的时候会导致那个分支也被修改了
如果不想add和commit,那可以用git stash
将工作现场暂存一下
需要注意的是:
git stash
所存储的修改记录是全局的,不是指定某个分支下的缓存。通俗的讲,git stash是git工具维护的一个全局的栈,会按照调用git stash的顺序,将各个分支下git stash的修改保存起来并压入同一个全局(全分支共享)的栈中
也就是说,每次想要调用方法git stash pop
弹出的总是栈顶的那条记录,如果栈顶记录不是当前分支,之前所git stash时的分支,此时弹出的内容会不符当前分支的版本,会产生错误或冲突
命令:
git stash
隐藏当前工作现场,可以相同/不同分支多次stash
git stash list
查看隐藏起来的工作现场
git stash drop
删除工作现场
git stash apply
恢复公共现场,恢复后stash的内容不会删除,需要用drop来删除,不是简单的栈结构,可以算是链栈,支持索引弹出制定记录
leel@dirname (branch_1) <-----------当前所处分支
$ git stash list
stash@{0}: WIP on branch_2: 9b9354d Merge branch 'add_global_rr' into 'branch_2'
stash@{1}: WIP on branch_1: f68749d bugfix
stash@{2}: WIP on branch_2: 23fe861 bug fix 4
stash@{3}: WIP on branch_3: c06b8da bug fix
stash@{4}: WIP on branch_4: 9ed1dd6 move reload method to parent class
stash@{5}: WIP on branch_5: c833e3f Merge branch 'fix_add_version' into 'branch_2'
$ git stash pop stash@{1}
git stash pop
恢复栈顶的公共现场,恢复后会删除对应工作现场,用list无法看见
调用stash pop 或者 stash apply的时候要注意先用list查看一下当前栈的状态,根据所在分支进行调用