Git IntelliJ IDEA 中的 Stash 与 Shelve

Git Stash vs Shelve in IntelliJ IDEA

我对Git的shelve方面很不熟悉。如果stash是用来搁置未完成的工作那么shelve是什么?你会用它做什么?

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

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

git shelve 在 Git 中不存在。

git stash:

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

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

Intellij IDEA shelve dialog, the feature "shelving and unshelving 中所述“未链接到 VCS(版本控制系统工具),而是链接到 IDE 本身,以临时存储您尚未在更改列表中提交的未决更改。

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

将 JetBrains IDE 与 Git、"stashing and unstashing actions are supported in addition to shelving and unshelving. These features have much in common; the major difference is in the way patches are generated and applied. Shelve can operate with either individual files or bunch of files, while Stash can only operate with a whole bunch of changed files at once. Here are some more details on the differences between them."

一起使用时

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

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

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

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

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

如您所见,我可以选择指定将哪个 files/lines 包括在我的书架上。请注意,我不能通过隐藏来做到这一点。

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

一些有用的链接:

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