Git进阶(八):git stash 与 git add_git stash和git add区别

打印 上一主题 下一主题

主题 871|帖子 871|积分 2613




    • 一、git stash



        • 1.1 git stash 两种应用场景



            • 1.1.1 改动同一分支

              • 1.1.2 不鉴戒改动其他分支


          • 1.2 git stash 常用命令


      • 二、git stash 与 git add 关系
      • 三、拓展阅读




一、git stash

可以或许将全部未提交的修改(工作区和暂存区)生存至堆栈中,用于后续恢复当前工作目录。
总的来说,git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行生存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不但仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会生存至堆栈中。
1.1 git stash 两种应用场景

对于多人并行开发,维护同一仓库工作场景,经常会出现文件归并冲突的情况,常见场景如下:
1.1.1 改动同一分支

我在本地修改好后,发现远程分支已经被改动了,此时我本地也被改动了就造成了冲突,无法push大概pull。
此时可以使用git stash:

  • git stash save "本地缓存内容标识" //把本地的改动暂存起来;
  • git pull //拉取远端分支(此时本地分支会回滚到前次commit的情况,新的改动都已生存在了stash中);
  • git stash pop // 将栈顶改动内容重新加回本地分支,就可以继续修改了,当然,如果改好了就是add,commit,push操纵。
1.1.2 不鉴戒改动其他分支

当正在dev分支上开发某个项目,这时项目中出现一个bug,必要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容生存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚生存的内容。
大概由于疏忽,本应该在dev分支开发的内容,却在master上进行了开发,必要重新切回到dev分支上进行开发,可以用git stash将内容生存至堆栈中,切回到dev分支后,再次恢复内容即可。
比方忘记切换分支,直接在master分支上做改动,这里假设我的分支是test分支。

  • git stash save "本地缓存内容标识" // 把本地当前改动暂存起来,此时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 可以清空。
1.2 git stash 常用命令

git stash 常用命令:


  • git stash save “save message” : 实行存储时,添加备注,方便查找,只有 git stash 也可以,但查找时不方便识别。
  • git stash list :检察 stash 了哪些存储。
  • git stash show :显示做了哪些改动,默认 show 第一个存储,如果要显示其他存贮,后面加 stash@{$num},好比第二个 git stash show stash@{1}。
  • git stash show -p : 显示第一个存储的改动,如果想显示其他存储,命令:git stash show stash@{$num} -p ,好比第二个:git stash show stash@{1} -p。
  • git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即 stash@{0},如果要使用其他个:git stash apply stash@{$num} , 好比第二个:git stash apply stash@{1}。
  • git stash pop :恢复之前缓存的工作目录,并将缓存堆栈中的对应 stash 删除,同时将对应修改应用到当前的工作目录下,默认为第一个 stash,即 stash@{0},如果要应用并删除其他 stash,命令:git stash pop stash@{$num} ,好比应用并删除第二个:git stash pop stash@{1}。
  • git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储。
  • git stash clear :删除全部缓存的 stash。
   !阐明!: 新增的文件,直接实行 stash 是不会被存储的,如果要生存这个新增的文件,必要首先实行 git add 命令把文件添加到git版本控制中,然后再实行 git stash 命令进行缓存。
  二、git stash 与 git add 关系

git add 只是把文件加到 git 版本控制里,并不等于就被 stash 起来了,git add 和 git stash 没有必然关系,但是实行 git stash 能准确存储的前提是文件必须在 git 版本控制中才行。
通例 git stash 的一个限制是它会一下暂存全部的文件。有时,只备份某些文件更为方便,让另外一些与代码库保持划一。一个非常有效的技巧,用来备份部分文件:

  • add 那些你不想备份的文件(比方: git add file1.js, file2.js);
  • 调用 git stash –keep-index。只会备份那些没有被 add 的文件。
  • 调用 git reset 取消已经 add 的文件的备份,继续自己的工作。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

飞不高

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表