我对Git的shelve方面非常不熟悉(EDIT:不是Git的一个方面,而是shelve的IntelliJ IDEA特性)。

如果储存是用来存放未完成的工作,那么什么是搁置?你会用它来做什么?

例如,在更新项目(从VCS菜单)

(IntelliJ IDEA 2019.2)


git中没有shelve。

只有git收藏:

当你想记录当前工作目录的状态和索引,但又想回到一个干净的工作目录时。 这将保存您的本地修改,并恢复工作目录以匹配HEAD提交。

你有一个2008年的旧项目git搁置,以隔离分支中的修改,但这在今天并不是很有用。

正如Intellij IDEA搁置对话框中所记录的那样,“搁置和取消搁置”特性并没有链接到VCS(版本控制系统工具),而是链接到IDE本身,临时存储您尚未提交的更改在更改列表中。

注意,从Git 2.13 (Q2 2017)开始,你现在也可以保存单个文件了。


当使用JetBrains IDE和Git时,“除了搁置和解搁置之外,还支持存储和解存储操作。这些特征有很多共同之处;主要的区别在于生成和应用补丁的方式。Shelve既可以操作单个文件,也可以操作一堆文件,而Stash只能一次操作一堆更改过的文件。下面是关于它们之间区别的更多细节。”


除了前面的答案,还有一个对我来说很重要的问题:

shelve是JetBrains的产品特性(如WebStorm, PhpStorm, PyCharm等)。它将搁置的文件放入.idea/shelf目录。

Stash是git的选项之一。它将存储文件放在.git目录下。


如果我没有在其他地方共享我的更改,我宁愿搁置更改,而不是将它们存储起来。

存储是git的一个特性,它不允许你选择特定的文件或文件中的更改。Shelving可以做到这一点,但这是ide特有的特性,而不是git的特性:

如你所见,我可以选择指定哪些文件/行要包括在我的搁置。注意,我不能在存储中这样做。

注意在IDE中使用shelf可能会限制补丁的可移植性,因为这些更改不会存储在.git文件夹中。

一些有用的链接:

https://www.jetbrains.com/help/idea/shelving-and-unshelving-changes.html https://www.jetbrains.com/help/idea/work-on-several-features-simultaneously.html


Shelf是JetBrains的一个功能,而Stash是Git的一个功能。您可以使用任何一个特性切换到不同的分支而不提交和丢失工作。我个人的经验是使用Shelf。