Git Shelve vs Stash

Edg*_*nez 227 git intellij-idea

shelve对Git 的方面非常不熟悉.如果stash用来放弃未完成的工作shelve那么呢?你会用它做什么用的?

Von*_*onC 221

git shelve 在Git中不存在.

只有git stash:

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

你有一个2008年的旧项目git shelve来隔离分支中的修改,但现在这不是很有用.

Intellij IDEA搁置对话框中所述," 搁置和取消搁置 "功能未链接到VCS(版本控制系统工具),而是链接到IDE本身,以临时存储尚未在更改列表中提交的挂起更改.

请注意,自Git 2.13(2017年第2季度)以来,您现在也可以存储单个文件.

  • 结果我误解了这个概念.我认为这是一个Git命令,实际上它是IntelliJ IDEA的第三方.我找不到它的git文档,所以以为我错过了什么.https://www.jetbrains.com/idea/help/shelving-and-unshelving-changes.html (65认同)
  • 您的doc链接表明“货架”仅是由IntelliJ IDE管理的一组变更(补丁),取消链接由Git管理的标准物品“散列”。因此,避免上架。 (2认同)
  • 在您的情况下,@ jerry chin搁置比隐藏更好。我希望在git中是否有货架。Webstorm耗尽了RAM。如果git有它,我们可以在cmd行中运行它将很有用 (2认同)
  • 有一个常见的用例是搁置没有解决 - 处理有问题的同事/公司实践。有可能将完整的垃圾添加到您的存储库中,并且由于某人的精神错乱而变得不洁“修复”它。另一种方法是类似于`git stash && <your actual command> && git stash pop`,但这很糟糕。自动搁置和应用更接近我们的需要。 (2认同)

Yek*_*ver 173

当使用JetBrains IDE和Git时,除了搁置和搁置之外,还支持存储和取消存储操作.这些功能有很多共同之处;主要区别在于补丁生成和应用的方式.搁置可以使用单个文件或束虽然Stash只能同时使用一大堆已更改的文件.以下是有关它们之间差异的更多细节."

  • @DmitryDavydov这里有`git stash -p`.不幸的是只在命令行中. (12认同)
  • 实际上,自**Git 2.13(2017年第2季度)**你可以存储个别文件... [更多内容](http://stackoverflow.com/questions/3040833/stash-only-one-file-out-of-多文件 - 即具备的,改与 - 混帐/ 3041055#3041055) (10认同)
  • 似乎**搁置**比**git stash**更灵活. (8认同)
  • 我发现“搁置”非常有用,例如,当您每次要自动生成文档时都想要应用补丁程序时,它们很有用。** Shelve将在.idea / shelve中创建一个文件,您可以将其添加到VCS中并与您的所有团队共享**,以便他们可以应用这些更改并运行相同的任务。 (4认同)

val*_*lex 51

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

shelve被JetBrains的产品功能(例如WebStorm,PhpStorm,PyCharm等等).它将搁置的文件放入.idea/shelf目录中.

stash是一种git选择.它将存储的文件放在.git目录下.

  • 感谢您澄清这个关键问题。 (2认同)

ham*_*uki 14

如果我不在其他地方分享我的更改,我宁愿搁置更改而不是隐藏它们。

Stashing 是 git 的一项功能,不提供选择特定文件或文件内更改的选项。搁置可以做到这一点,但这是一个特定于 IDE 的功能,而不是一个 git 功能:

在此处输入图片说明

如您所见,我可以选择指定要包含在我的书架上的文件/行。请注意,我不能通过隐藏来做到这一点。

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

一些有用的链接:


O_K*_*O_K 6

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