IntelliJ IDEA中的Git Stash vs Shelve

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

如果stash用于搁置未完成的工作,那么shelve是什么?你会用它来做什么?

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

更新项目选项

(IntelliJ IDEA 2019.2)

更新项目提示窗口

181976 次浏览

git shelve在Git中不存在。

只有git stash:

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

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

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

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

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

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

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

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

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

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

enter image description here

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

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

一些有用的链接:

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