IDEA的Shelve与Git的Stash之间的区别

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

有两种方法可以解决上述问题:一个是利用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功能?
在Local Changes中找到尚未commit的文件。

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

选择Shelve Changes...。

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

然后点击Shelve Changes按钮。

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

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

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

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

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

大致的步骤如下:

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

有哪些需要注意的地方?
在Unshelve时,如果当前Local Changes中某个文件已有的修改与Shelve中对应文件的修改位置相同,则会产生冲突。

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

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

Stash有什么优点?
可以将Stash的内容应用到一个已存在的分支或者以Stash为基础创建一个新的分支。

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

如何使用Stash?
在Local Changes中找到尚未commit的文件。

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

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

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

最后,点击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按钮即可。

有哪些需要注意的地方?
在一系列的commit之后再恢复stash时,可能会导致冲突,需要手动解决。

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

总结一下两者的区别
Stash是Git提供的功能,而shevle是IDEA本身提供的功能。
Stash只能针对当前整个分支所有未commit的文件进行操作;而Shelve更灵活,可以对单个或多个未commit的文件进行操作;
要恢复stash的文件时(unstash操作),如果本地有尚未commit的修改,那么此次unstash操作会失败。IDEA右下角会弹出提醒:你的本地修改将会被merge覆盖。请commit,stash或revert它们之后再继续。而恢复shelve的文件时(unshelve操作),无论本地有没有被修改的文件都不会影响。解决可能产生的冲突即可。
Stash的文件是放在.git文件中;Shelve的文件是放在.idea/shelf文件中。这意味着Stash的文件比Shelve的文件有更强的可移植性。
最后
本篇文章的目的是为了对IDEA的Shelve和Git的Stash两个功能进行一个大致的比较,并讲解最基础的使用方法。

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

本文参考链接:
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.youkuaiyun.com/weixin_43274002/article/details/124079432

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值