前言

在日常开发中,会遇到需要在不同的开发任务之间切换的情况,此时,如果手中有尚未写完的代码,就需要使用某种方法先保存起来,之后再继续处理没写完的代码。

有两种方法可以解决上述问题:一个是利用IDEA提供的Shelve功能,另一个是利用Git提供的Stash功能。

如果你也是一个使用IDEA作为集成开发环境的话,而且使用的版本控制管理工具也是Git的话,那这篇文章也许对你在日常工作中遇到上面的情况时有所帮助。

本文中介绍了IDEA的Shelve与Git的Stash这两个功能的特点、如何使用、需要注意的地方。

IDEA的Shelve功能

Shelve是一个什么样的功能?

Shelve是IDEA本身提供的一个功能,用来暂时保存尚未commit的修改

注意,这里为什么要特别指出“尚未commit”的修改?

因为IDEA提供的Shelve这个功能只能作用于被版本控制管理的文件。

也就是说,如果你的文件,没有被类似Git、Subversion等版本控制软件管理的话,是无法使用Shelve这个功能的。

Shelve功能有哪些优点?

1.既可以暂存单个文件,也可以暂存整个ChangeList中所有文件。

2.可以根据需要多次应用被Shelve的修改。

如何使用Shelve功能?

  1. Local Changes中找到尚未commit的文件。

  2. 右键点击想要Shelve的文件或整个ChangeList

  3. 选择Shelve Changes...

  4. 会弹出对话框,填写Commit Message一栏(它会作为此次创建的shelf的名字)。

  5. 然后点击Shelve Changes按钮。

  6. 之后,会自动转到Shelf一栏(出现在Local Changes右边),里面放着所有被Shelve的文件。

因IDEA在不断迭代更新,有些地方可能进行了优化导致位置可能发生变化。

所以以上给出的是一个比较通用的方法:直接从Local Changes中找到需要Shelve的文件。

如何使用Unshelve功能?

既然文件的修改被Shelve起来了,肯定还是希望能在某一时刻能恢复回来继续工作。

所以,也就有了对应的Unshelve功能。

大致的步骤如下:

ShelfLocal Changes旁边)页面中,找到需要Unshelve的文件,右键单击在上下文菜单中找到Unshelve...选项,单击后在对话框中填写相关信息,然后点击对话框右下角Unshelve Changes即可。

有哪些需要注意的地方?

Unshelve时,如果当前Local Changes中某个文件已有的修改与Shelve中对应文件的修改位置相同,则会产生冲突。

Git的Stash功能

Stash是一个什么样的功能?

Stash是Git提供的一个功能,会将所有尚未commit的修改进行储存

注意,Stash操作是会将所有尚未commit的文件都一并保存的。

Stash有什么优点?

  1. 可以将Stash的内容应用到一个已存在的分支或者以Stash为基础创建一个新的分支。

  2. Stash的内容可以根据需要多次应用到所需的任何分支上。

如何使用Stash

  1. Local Changes中找到尚未commit的文件。

  2. 右键点击任意一个文件,出现上下文菜单,将光标移动到Git上。

  3. 右边出现Git的相关选项,点击Stash Changes...选项。

  4. 会弹出对话框,在Message框中填写关于此次stash内容的说明。

  5. 最后,点击Create Stash按钮即可。

这里也是选择了比较通用的方式找到需要被stash的文件,而不需要关心IDEA主菜单上关于Git的变化。

如何使用Unstash功能。

Shelve功能有个对应的Unshelve功能一样,Stash功能也有一个对应的叫UnStash的功能。

UnStash并没有一个像存储着Shelve文件的Shelf页面,而是需要在菜单栏的Git中找。

使用的步骤大致如下:

在IDEA主菜单上,找到Git | Uncommitted Changes | Unstash Changes选项;

出现对话框,选择想要应用stash的分支;

再从stash列表中选择需要应用的stash

最后点击Apply Stash按钮即可。

有哪些需要注意的地方?

  1. 在一系列的commit之后再恢复stash时,可能会导致冲突,需要手动解决。

  2. 恢复stash时,当前的工作区不能有尚未commit的修改。

总结一下两者的区别

  1. Stash是Git提供的功能,而shevle是IDEA本身提供的功能。
  2. Stash只能针对当前整个分支所有未commit的文件进行操作;而Shelve更灵活,可以对单个或多个未commit的文件进行操作;
  3. 要恢复stash的文件时(unstash操作),如果本地有尚未commit的修改,那么此次unstash操作会失败。IDEA右下角会弹出提醒:你的本地修改将会被merge覆盖。请commitstashrevert它们之后再继续。而恢复shelve的文件时(unshelve操作),无论本地有没有被修改的文件都不会影响。解决可能产生的冲突即可。
  4. Stash的文件是放在.git文件中;Shelve的文件是放在.idea/shelf文件中。这意味着Stash的文件比Shelve的文件有更强的可移植性。

最后

本篇文章的目的是为了对IDEA的Shelve和Git的Stash两个功能进行一个大致的比较,并讲解最基础的使用方法。

因此,本篇文章并没有讲解在使用ShelveUnshelveStashUnstash时弹出的对话框中更多的具体选项该如何选择使用,如果希望更好的掌握这两个功能,可进一步查阅资料了解。


本文参考链接:

  • https://www.jetbrains.com/help/idea/2021.3/shelving-and-unshelving-changes.html

  • https://www.jetbrains.com/help/idea/2021.3/work-on-several-features-simultaneously.html

  • https://stackoverflow.com/questions/28008139/git-stash-vs-shelve-in-intellij-idea

IDEA的Shelve与Git的Stash之间的区别相关推荐

  1. Git GUI,Git Bash,Git CMD标签之间的区别

    Git GUI,Git Bash,Git CMD标签之间的区别 本地安装完Git之后,右键会出现2个有关Git的标签,"Git GUI Here" 和 "Git Bash ...

  2. Git和Github之间的区别

    http:// jahya .NET / blog /?2013-05- Git -vs-github ls与Github相同! 有一天,我试图告诉一个朋友Git和Github是如何相关的.Git e ...

  3. #39;git pull#39;和#39;git fetch#39;有什么区别?

    主持人注意:鉴于此问题已经发布了67个答案 (其中一些已删除),请在发布另一个问题之前考虑您是否正在贡献新内容 . git pull和git fetch什么区别? #1楼 我花了一点时间来了解有什么区 ...

  4. Git - ‘假设未改变‘和‘跳过工作树‘之间的区别

    本文翻译自:Git - Difference Between 'assume-unchanged' and 'skip-worktree' I have local changes to a file ...

  5. Git Fetch vs Pull:Git Fetch和Git Pull命令之间有什么区别?

    Git pull and fetch are two commands that are regularly used by Git users. Let's see the difference b ...

  6. GIT和SVN之间的五个基本区别

    GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征.所以,这篇文章的主要目的就是 ...

  7. git fetch和git pull之间的区别--转载

    原文地址:http://blog.csdn.net/a19881029/article/details/42245955 git fetch和git pull都可以用来更新本地库,它们之间有什么区别呢 ...

  8. Git 使用 stash暂存代码

    如果你修改了代码没有commit提交本地库,git拒绝你切换分支. 如果我们不想提交不完善的代码,但是得去修改一个紧急Bug,此时 stash 可将当前未提交到本地仓库的代码,储藏(stash)到Gi ...

  9. git 如何stash(储藏)部分文件

    今天工作时遇到一个问题,新做的功能有问题,加了好多调试信息,另外想回退到上一次的版本看一下运行时的代码堆栈有什么不同,这就需要把加的调试信息stash起来,不然回退的时候会冲突.但是目录下还有好多被I ...

最新文章

  1. mendix归还界面如何只显示登录人自己借阅的书籍,而不显示全部人借阅的书籍
  2. 在BAE搭建的Django中实现图片上传并用jquery预览图片
  3. reduce 轻松将cookie转化为对象
  4. 5.8.1 创建类型实例
  5. cshtml中引用css_ASP.NET CoreMVC 中的控制器
  6. 62 SD配置-交货凭证配置-定义交货类型
  7. 1067 Sort with Swap(0, i) (25 分)
  8. 透过NpetShop 看Web项目开发中的分工合作
  9. Segment Tree Beats 区间最值问题
  10. JS判断客户端是手机还是PC的2个代码
  11. linux 路径结构
  12. 用集合return多个值_Python拾珍:用这些功能写出更简洁、更可读或更高效的代码
  13. c语言编程软件平板_ipad可以编程c语言吗
  14. 永洪报表工具_报表工具对比选型系列用例——过程计算
  15. Stata:数据包络分析(DEA)
  16. 沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第七章 GTP的IP核配置
  17. P3855 [TJOI2008]Binary Land
  18. Catch That Cow S
  19. Windows 10 喇叭红叉 重装驱动无效 点击喇叭显示无插座信息
  20. 派森学python_2019 年 1月 26 日 随笔档案 - 派森学python - 博客园

热门文章

  1. windows10下Qt5.15配置
  2. Rise of Nations玩法
  3. ovirt创建windows虚拟机
  4. 【异地恋最怕的不是变心,而是慢慢的不知道怎么了,感情就不在了——早上醒来,又看见一对异地恋人发出的日志,仅仅45天,一年多的感情就这样崩塌……】 这是我看过最好的一篇异地文章!
  5. python爬虫-爬取网易云音乐歌曲评论
  6. Skype for business企业语音配置之七 设置呼叫转接
  7. 理光打印机连接电脑后不打印的原因及解决方法
  8. package.json文件下的scripts解析总结
  9. 除了“卖奶”给伊利,“乳业上游第一股”优然牧业还有什么盼头?
  10. 西财计算机研究生专硕复试分数线,2017年西南财经大学考研复试分数线