吉特搁置vs藏匿


275

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

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

在此处输入图片说明

一个会得到(在Idea 2019.2中)

在此处输入图片说明


14
shelve不是git命令。这个问题的背景是什么,这些术语从何而来?shelve在其他一些工具中也存在,但它不是git的一部分。
乔纳(Jonah)2015年

2
Git隐藏与shelvebzr,hg等类似。您是否指的是git互操作性软件包?
dr Robertz

3
投票数超出了接受的答案可能的确认范围,这个问题是有效的,并且“搁置”一词也被误认为是git命令。感谢您提出来,这也是我的疑问(也是来自IDEA)
PravyNandas

Answers:


266

git shelve 在Git中不存在。

git stash

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

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

Intellij IDEA搁置对话框中所述,功能“ 搁置和搁置 ”功能未链接到VCS(版本控制系统工具),而是链接到IDE本身,以暂时将尚未提交的未决更改存储在变更列表中。

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


73
原来我误解了这个概念。我以为这是Git命令,而实际上它是IntelliJ IDEA的第三方东西。我找不到它的git文档,以为我缺少了一些东西。jetbrains.com/idea/help/shelving-and-unshelving-changes.html
埃德加·马丁内斯

2
您的doc链接表明“货架”仅是由IntelliJ IDE管理的一组变更(补丁),取消链接由Git管理的标准物品“散件”。因此,避免上架。
barbara.post,2015年

2
在您的情况下,@ jerry chin搁置比隐藏更好。我希望在git中是否有货架。Webstorm耗尽了RAM。如果git有了它,我们可以在cmd行中运行它,将非常有用
digender mahara

2
有一个常见的用例是货架上的东西无法解决-处理有问题的同事/公司惯例。可能由于某些人的精神错乱而将完整的垃圾添加到您的存储库中,而不是像犹太人那样“修复”它。替代方案是类似的东西,git stash && <your actual command> && git stash pop但是很糟糕。自动搁置和应用更贴近我们的需求。
smaudet

1
@VonC相似之处不一样-我有一个用例,其中我正在使用的项目具有我要求无法提交的设置,因为它们“不标准”。我碰到过其他六个用例,涉及需要修改构建文件等以进行本地开发与dev / test / prod之类的事情。
smaudet

187

当将JetBrains IDE与Git一起使用时,“除了搁置和搁置外,还支持隐藏和隐藏操作。这些功能有很多共同点;主要区别在于补丁的生成和应用方式。搁置既可以处理单个文件,也可以捆绑使用文件,而Stash一次只能处理一大堆已更改的文件。这里有一些有关它们之间差异的更多详细信息。”


10
似乎货架git stash更灵活。
德米特里·达维多夫

12
@DmitryDavydov git stash -p两者都胜过。不幸的是,仅在命令行中。
Vee

1
@TheVee是的,在功能方面与货架非常相似,感谢您提供信息。
德米特里·达维多夫

10
实际上,自Git 2.13(2017年第二季度)以来, 您可以存储单个文件... 阅读更多
kyb

5
例如,当您要每次自动生成文档时都要应用的更改补丁时,我发现搁置非常有用。Shelve将在.idea / shelve中创建一个文件,您可以将其添加到VCS中并与您的所有团队共享,以便他们可以应用这些更改并运行相同的任务。
ingkevin

63

除了以前的答案外,还有一个重要的注意事项:

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

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


2
感谢您澄清这个关键问题。
AmerllicA

4

如果我不在其他地方共享更改,我宁愿搁置更改而不是存储更改。

藏匿是git的功能,它不能为您提供选择特定文件或更改文件内部的选项。搁架可以做到这一点,但这是特定于IDE的功能,而不是git功能:

在此处输入图片说明

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

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

一些有用的链接:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.