最近git用的比较多,因为是实验室多个人维护一个仓库,经常会有合并冲突的情况,就学习了一下git stash的用法,目前有两个场景非常常用:
1. 有人与我改动同一分支
我在本地修改好后,发现远程分支已经被改动了,此时我本地也被改动了就造成了冲突,无法push或者pull。
此时可以使用git stash:
1 git stash //把本地的改动暂存起来 2 git pull //拉取远端分支(此时本地分支会回滚到上次commit的情况,新的改动都存在了stash中) 3 git stash pop // 将栈顶改动重新加回本地分支,就可以继续修改了,当然,如果改好了就是add,commit,push啥的。。
2. 不小心改动了其他分支,例如忘记切换,直接在master分支上做改动,这里假设我的分支是test分支
git stash //把本地当前改动暂存起来,此时master分支就恢复到了上次拉取时的状态
git checkout test //切换到需要改动的分支
git stash pop //将改动pop到自己当前的分支
小结以及一些扩展:
顾名思义,stash就是一个栈,平时我们把需要暂存的文件存到栈中,把代码恢复到上次拉取的状态以进行操作,而git stash pop 就是让栈顶元素出栈并删除。
git stash apply 则是只取栈顶元素,但是不删除。
这样会有一个显而易见后果,如果我再次执行git stash,新的改动将会出现在栈顶,栈中元素会越来越多,此时可以使用 git stash list 命令查看栈中元素,此时每个栈中元素会有自己对应的编号
使用git stash apply stash@{0} (0可以换成对应编号),来添加不同改动。同样,你也可以 git stash drop stash@{0} 来删除对应改动。
git stash clear 可以清空 stash list
就我个人而言,git stash pop就已经满足日常需要了,所以我的stash list里日常只有编号0 和空