Git --- git stash 的两种应用场景 与 用法总结 与 注意点

一.git stash 的两种应用场景

最近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分支
1 git stash          //把本地当前改动暂存起来,此时master分支就恢复到了上次拉取时的状态
2 git checkout test  //切换到需要改动的分支
3 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 和空

二.git stash 用法总结和注意点

1.常用git stash命令:
  1. git stash save “save message” : 执行存储时,添加备注,方便查找,只有git stash
    也要可以的,但查找时不方便识别。
  2. git stash list :查看stash了哪些存储
  3. git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个git stash show stash@{1}
  4. git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show
    stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
  5. git stash apply:应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash applystash@{$num} , 比如第二个:git stash apply stash@{1}
  6. git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git
    stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
  7. git stash drop stash@{KaTeX parse error: Expected 'EOF', got '}' at position 4: num}̲ :丢弃stash@{num}存储,从列表中删除这个存储
  8. git stash clear :删除所有缓存的stash
2.注意点:

说明:新增的文件,直接执行stash是不会被存储的,举例如下:
在这里插入图片描述

如上图:在git status 那一步很明显可以看出来,我修改了README,添加了新文件abc.txt,然后执行了git stash save后,在执行git stash list 可以看到刚才的save是的信息,然后使用git stash show ,只显示了README的改动被存起来了。

我们知道,执行了git statsh 以后,被存起来的在当前目录再执行git status 就看不到了,但是我们现在再执行git status,如下:
在这里插入图片描述
这个文件还在,说明没有被存起来。说白了就是没有在git 版本控制中的文件,是不能被git stash 存起来的
那要怎么办呢,这个文件我也想存起来,很明显,先执行下git add 加到git版本控制中,然后再git stash就可以了,如下:

在这里插入图片描述
最后一步可以看出来,这个新增文件已经被stash了。
这个时候再执行下git status ,被存起来的在当前目录就看不到了,如下:
在这里插入图片描述
这个时候,想切分支就再也不会报错有改动未提交了。
如果要应用这些stash,直接使用git stash apply或者git stash pop就可以再次导出来了。

总结下:git add 只是把文件加到git 版本控制里,并不等于就被stash起来了,git add和git stash 没有必然的关系,但是执行git stash 能正确存储的前提是文件必须在git 版本控制中才行。

3.技巧:

常规 git stash 的一个限制是它会一下暂存所有的文件。有时,只备份某些文件更为方便,让另外一些与代码库保持一致。一个非常有用的技巧,用来备份部分文件:

  1. add 那些你不想备份的文件(例如: git add file1.js, file2.js)
  2. 调用 git stash –keep-index。只会备份那些没有被add的文件。
  3. 调用 git reset 取消已经add的文件的备份,继续自己的工作。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值