【问题标题】:Git Stash vs Shelve in IntelliJ IDEAIntelliJ IDEA 中的 Git Stash 与 Shelve
【发布时间】:2015-03-16 11:38:37
【问题描述】:

我对 Git 的 shelve 方面非常陌生。如果stash 用于搁置未完成的工作,那么shelve 是什么?你会用它做什么?

例如更新项目(来自 VCS 菜单)

一个会得到(在 IntelliJ IDEA 2019.2 中)

【问题讨论】:

  • shelve 不是 git 命令。这个问题的背景是什么,这些术语来自哪里? shelve 存在于其他一些工具中,但它不是 git 的一部分。
  • git stash 类似于 bzr、hg 等中的shelve,你指的是一些 git 互操作包吗?
  • 比接受的答案可能证实的更多赞成,这个问题是有效的,术语“搁置”同样被误解为 git 命令。谢谢你的提问,这也是我的疑问(也来自 IDEA) .

标签: git intellij-idea jetbrains-ide shelving


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    如您所见,我可以选择指定要在我的搁置中包含哪些文件/行。请注意,我无法通过 stash 来做到这一点。

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

    一些有用的链接:

    【讨论】:

      【解决方案3】:

      git shelve 在 Git 中不存在。

      仅限git stash

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

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

      Intellij IDEA shelve dialog 中所述,“shelving and unshelving”功能未链接到 VCS(版本控制系统工具),而是链接到 IDE 本身,用于将您尚未提交的待处理更改临时存储在更改列表中。

      注意since Git 2.13 (Q2 2017), you now can stash individual files too

      【讨论】:

      • 原来我误解了这个概念。我以为这是一个 Git 命令,而实际上它是 IntelliJ IDEA 的第三方产品。我找不到它的 git 文档,所以以为我遗漏了一些东西。 jetbrains.com/idea/help/shelving-and-unshelving-changes.html
      • 您的文档链接表明“架子”是一组仅由 IntelliJ IDE 管理的更改(补丁),取消链接由 Git 管理的标准事物的“存储”。所以避免使用货架。
      • @jerry chin shelve 在您的情况下比 stash 更好。我希望搁置是否存在于 git 中。 Webstorm 吸出内存。如果 git 有它会很有用,我们可以在 cmd 行中运行它
      • 有一个常见的用例是 shelve 有一个 stash 无法解决的问题——处理有问题的同事/公司的做法。有可能将完整的垃圾添加到您的存储库中,并且由于某人的精神错乱而无法“修复”它。另一种选择是git stash && <your actual command> && git stash pop,但这很糟糕。自动搁置和应用更接近我们的需要。
      • @VonC 类似但不一样 - 我有一个用例,我正在使用的项目有我需要的设置,因为它们“不是标准的”而无法提交。我遇到的六个其他用例涉及需要修改构建文件等以进行本地开发与开发/测试/产品。
      【解决方案4】:

      除了以前的答案之外,还有一个对我来说很重要的注意事项:

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

      stashgit 选项之一。它将隐藏的文件放在.git 目录下。

      【讨论】:

      • 感谢您澄清这个关键问题。
      【解决方案5】:

      在将 JetBrains IDE 与 Git 结合使用时,“除了搁置和取消搁置之外,还支持存储和取消存储操作。这些功能有很多共同点;主要区别在于生成和应用补丁的方式。搁置可以与任何一个单独操作文件或一堆文件,而 Stash 只能同时处理一大堆更改的文件。这里有一些 more details 说明它们之间的区别。”

      【讨论】:

      • 看来 shelvegit stash 更灵活。
      • @DmitryDavydov git stash -p 胜过两者。不幸的是只在命令行中。
      • @TheVee 是的,它在功能方面与 shelve 非常相似,感谢您提供信息。
      • 实际上,从 Git 2.13 (Q2 2017) 开始,您可以存储单个文件...read more
      • 我发现 shelve 非常有用,例如,当您每次想要自动生成文档时都想要应用更改补丁。 Shelve 将在 .idea/shelve 中创建一个文件,您可以将其添加到您的 VCS 并与您的所有团队共享,以便他们可以应用这些更改并运行相同的任务。
      猜你喜欢
      • 2016-01-04
      • 2012-04-17
      • 1970-01-01
      • 2011-12-02
      • 2023-03-21
      • 1970-01-01
      • 2013-06-02
      • 2019-04-09
      • 2014-03-11
      相关资源
      最近更新 更多