我对Git的shelve方面非常不熟悉(EDIT:不是Git的一个方面,而是shelve的IntelliJ IDEA特性)。
shelve
如果stash用于搁置未完成的工作,那么shelve是什么?你会用它来做什么?
stash
例如,在更新项目(从VCS菜单)
(IntelliJ IDEA 2019.2)
git shelve在Git中不存在。
git shelve
只有git stash:
git stash
你有一个2008年的旧项目git搁置来隔离一个分支中的修改,但这在今天并不是很有用。
正如在Intellij IDEA搁置对话框中所记录的那样,特性“置物和拆物”不是链接到VCS(版本控制系统工具),而是链接到IDE本身,临时存储你还没有提交的更改在更改列表中。
注意从Git 2.13 (Q2 2017)开始,你现在也可以保存单个文件了.;
当使用JetBrains IDE和Git时,“除了搁置和解搁置之外,还支持存储和解存储操作。这些特征有很多共同之处;主要的区别在于生成和应用补丁的方式。Shelve既可以操作单个文件,也可以操作一堆文件,而Stash只能一次操作一堆更改过的文件。这里有一些更多的细节关于它们之间的区别。”
除了前面的答案,还有一个对我来说很重要的问题:
shelve是JetBrains产品的特性(如WebStorm, PhpStorm, PyCharm等)。它将搁置的文件放入.idea/shelf目录。
WebStorm
PhpStorm
PyCharm
.idea/shelf
stash是git选项之一。它将存储文件放在.git目录下。
git
.git
如果我没有在其他地方共享我的更改,我宁愿搁置更改,而不是将它们存储起来。
存储是git的一个特性,它不允许你选择特定的文件或文件中的更改。Shelving可以做到这一点,但这是ide特有的特性,而不是git的特性:
如你所见,我可以选择指定哪些文件/行要包括在我的搁置。注意,我不能在存储中这样做。
注意在IDE中使用shelf可能会限制补丁的可移植性,因为这些更改不会存储在.git文件夹中。
一些有用的链接:
Shelf是JetBrains的一个功能,而Stash是Git的一个功能。您可以使用任何一个特性切换到不同的分支而不提交和丢失工作。我个人的经验是使用Shelf。