git stash命令详解

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查看一下当前栈的状态,根据所在分支进行调用

你可能感兴趣的:(git)