IntelliJ的Shelve和Git的stash有什么区别?
IntelliJ的Shelve与Git的stash之间的区别是什么?
在大型项目中,使用多个模块(每个模块都有自己的存储库)时,IntelliJ的Shelve相对于Git的stash具有明显的优势。使用Shelve,您可以将属于多个存储库的更改保存在一个变更列表中。而使用stash,您需要在每个存储库中分别进行存储和恢复。这在涉及多个模块(以及多个存储库)的特定功能开发时非常有用。
解决方法:使用IntelliJ的Shelve功能可以在一个变更列表中保存属于多个存储库的更改,而不需要在每个存储库中分别进行存储和恢复。这对于大型项目中涉及多个模块的特定功能开发非常有用。以下是使用IntelliJ的Shelve功能的代码示例:
// 创建一个新的变更列表
git stash save "MyShelve"
// 在变更列表中保存更改
git stash push -m "MyShelve"
// 恢复变更列表中的更改
git stash apply "MyShelve"
// 删除变更列表
git stash drop "MyShelve"
使用IntelliJ的Shelve功能,您可以方便地在一个变更列表中保存和恢复属于多个存储库的更改,而不需要在每个存储库中分别进行操作。这提高了开发效率,并简化了在涉及多个模块的项目中的工作流程。
IntelliJ的Shelve和Git的stash有什么区别?
IntelliJ的Shelve和Git的stash在很多方面都很相似,但也有一些区别。首先,Shelve是IntelliJ的一个特性,因此无法在IDE之外使用。而Git的stash可以在任何地方使用。
其次,Git的stash只能处理整个工作目录和索引,而IntelliJ的Shelve可以处理单个文件和变更列表。这在某些情况下是必要的,比如这里提到的问题。这使得IntelliJ的Shelve更加灵活。
另外,IntelliJ对Shelve的内置支持更好。与之相比,使用Git的stash更加直接简单。特别是,你可以通过版本控制工具窗口对你的变更进行Shelve、取消Shelve或者查看已经Shelve的文件。
此外,根据个人经验,Shelve的速度稍微快一些,特别是在大型项目中,当涉及到大量文件的变更时。
更多信息可以参考文档。对于我来说,右键点击变更列表来快速进行Shelve非常有用。正如你所提到的,我发现这样稍微快一些。
还有一点需要纠正,"Git stash works only with entire working directory and index"这是错误的。Git的stash也可以处理单个文件和文件夹,例如:git stash -- foo/bar.txt
。
IntelliJ的Shelve和Git的stash在功能和用法上有一些区别。根据具体的需求和个人喜好,选择适合自己的工具更加重要。
IntelliJ的Shelve和Git的stash之间有什么区别?
问题出现的原因:
根据IntelliJ的文档,Git集成中除了支持shelving和unshelving之外,还支持"stashing"和"unstashing"。这两个功能有很多共同点,唯一的区别在于生成和应用补丁的方式。stashed的补丁由Git自身生成,以后可以不需要IntelliJ IDEA来应用它们。而shelved的补丁是由IntelliJ IDEA生成的,通常也是通过IDE应用的。在IntelliJ IDEA之外应用shelved的变更也是可能的,但需要额外的步骤。
解决方法:
shelving和stash的优势是什么?如果你使用的是没有本地stash风格特性的版本控制系统,那么shelving可能会很有用。如果你使用的是git,我看不出任何真正的好处。
答案中列出了shelving的“真正好处”。对我来说,最重要的是能够选择哪些文件/代码块进行shelving,就像提交时一样。自Git 2.13版本以来,可以使用git stash push
来进行单独文件的stash。
shelving可以更好地查看内部内容和区别。它更容易只应用一部分已更改的文件。起初我对这个功能不太有信心,但现在我使用它的频率比stash更高。
但是,你可以编辑shelved的变更列表吗?在我看来,它们不能被编辑,而是必须重新创建。
为了修改已经shelved的变更,首先必须先un-shelve它们;这是唯一的方法。