【问题标题】:What is the difference between IntelliJ's Shelve and Git stash?IntelliJ 的 Shelve 和 Git stash 有什么区别?
【发布时间】:2016-01-04 02:14:08
【问题描述】:

IntelliJ 支持 git stashes 以及它自己的内置搁置命令。这些在目的和效用上似乎几乎相同。它们有什么区别?

【问题讨论】:

标签: git intellij-idea git-stash


【解决方案1】:

来自 IntelliJ documentation

在 Git 集成中,除了搁置和取消搁置之外,还分别支持“stashing”和“unstashing”。这些功能有很多共同点,唯一的区别在于补丁的生成和应用方式。

  • 带有隐藏更改的补丁由 Git 自身生成。要稍后应用它们,您不需要 IntelliJ IDEA。
  • 带有搁置更改的补丁由 IntelliJ IDEA 生成。通常,它们也通过 IDE 应用。在 IntelliJ IDEA 之外应用搁置的更改也是可能的,但需要额外的步骤。

【讨论】:

  • 那么,搁置的优点是什么,因为它与普通的 git “不太兼容”?
  • 如果您使用没有原生存储样式功能的 VCS,搁置似乎很有用。如果你使用 git,我看不到任何真正的好处。
  • id.bobr 的答案中列出了“真正的好处”。对我来说最重要的是能够选择要存储的文件/块,就像提交时一样。
  • 从 Git 2.13 开始,可以使用 git stash push 存储单个文件。
  • Shelve 可以让您更好地了解里面的内容和不同之处。仅应用已更改文件的某些部分更容易。起初我不相信这个功能,但现在我使用它的频率超过了 stash。
【解决方案2】:

它们非常相似,除了:

  • 您不能在 IDE 之外使用 shelve,因为它是 Intellij 的功能。
  • Git stash 仅适用于整个工作目录和索引。 IntelliJ 的搁置可以处理单个文件和更改列表(IntelliJ 的另一个功能)。如您所见,例如here,有时是必要的。
  • Idea 对搁置有更好的内置支持。使用 git stash 更直接。特别是,您可以搁置\取消搁置您的更改或从版本控制工具窗口查看搁置的文件。

另外,恕我直言,搁置的工作速度稍快,尤其是在大型项目中,当大量文件被更改时。

请参阅documentation 了解更多信息。

【讨论】:

  • 我发现右键单击一个不变的以快速将其搁置非常有用。正如你所提到的,我发现它稍微快了一点。
  • "Git stash 仅适用于整个工作目录和索引" - 这是错误的。 Git stash 也可以存储单个文件和文件夹 - 例如:git stash -- foo/bar.txt
【解决方案3】:

Intellij 的 Shelve 与普通的 Git 存储相比的一个明显优势是,使用 Shelve,您可以将属于多个存储库的更改保存在一个更改列表中。使用 stash,您需要单独在每个 repo 中存储/取消存储。这在具有多个模块(每个模块都有自己的 repo)的大型项目中非常有用,其中特定的功能工作可能会跨越多个模块(因此需要多个 repos)

【讨论】:

    【解决方案4】:

    这是Documentation 所说的

    存储更改与搁置非常相似。唯一的区别在于补丁的生成和应用方式。存储由 Git 生成,可以在 IntelliJ IDEA 内部或外部应用。带有搁置更改的补丁由 IntelliJ IDEA 生成,也通过 IDE 应用。此外,存储涉及所有未提交的更改,而当您将更改放到架子上时,您可以选择一些本地更改而不是全部搁置。

    【讨论】:

      猜你喜欢
      • 2017-11-24
      • 2015-03-16
      • 1970-01-01
      • 2017-11-25
      • 2013-02-23
      • 2014-03-11
      • 2012-04-17
      • 2013-11-06
      相关资源
      最近更新 更多