Git Shelve vs Stash


276

Я очень незнаком с shelveаспектом Git. Если stashиспользуется, чтобы отложить незаконченную работу, что shelveтогда? Что бы вы использовали для этого?

Например, в обновлении проекта (из меню VCS)

введите описание изображения здесь

один получит (в идее 2019.2)

введите описание изображения здесь


14
shelveэто не команда git. Каков контекст этого вопроса, откуда берутся эти термины? shelveсуществует в некоторых других инструментах, но это не часть git.
Иона

2
Git stash похож на shelvebzr, hg и т. Д. Вы имеете в виду какой-то пакет взаимодействия git?
DrRobertz

3
вероятно, больше подтверждений, чем принятый ответ, этот вопрос является действительным, и термин '' Полка '' так же неправильно понимается как команда git. Спасибо за вопрос, это тоже было моим сомнением (от IDEA).
PravyNandas

Ответы:


268

git shelve не существует в Git.

Только git stash:

  • когда вы хотите записать текущее состояние рабочего каталога и индекса, но хотите вернуться в чистый рабочий каталог.
  • который сохраняет ваши локальные изменения и возвращает рабочий каталог в соответствие с коммитом HEAD.

У вас был старый проект git shelve 2008 года, чтобы изолировать изменения в ветке, но в наше время это было бы не очень полезно.

Как описано в диалоговом окне полки Intellij IDEA , функция « откладывание и откладывание » связана не с VCS (инструментом системы управления версиями ), а с самой IDE, чтобы временно хранить ожидающие изменения, которые вы еще не зафиксировали в списке изменений.

Обратите внимание, что начиная с Git 2.13 (Q2 2017), вы теперь можете также хранить отдельные файлы .


74
Оказывается, я неправильно понял концепцию. Я думал, что это команда Git, хотя на самом деле это сторонняя программа от IntelliJ IDEA. Я не мог найти git docs для этого, поэтому думал, что я что-то упустил. jetbrains.com/idea/help/shelving-and-unshelving-changes.html
Эдгар Мартинес

2
Ссылка на документ указывает, что «полки» - это набор изменений (патчей), управляемых только IntelliJ IDE, и не похожи на «тайники», которые являются стандартными объектами, управляемыми Git. Так что избегайте полок.
barbara.post

2
@ Джерри Чин полка лучше, чем тайник в вашем случае. Я хотел бы, если полка присутствовала в Git. Webstorm высасывает оперативную память. Было бы полезно, если бы git имел его, мы могли бы запустить его в строке cmd
digender mahara

2
Существует распространенный случай, когда на полке есть тайник, который не предназначен для решения проблем, связанных с сотрудниками / компаниями. Можно добавить полный мусор в ваш репозиторий и быть не кошерным, чтобы «починить» его из-за чьего-то безумия. Альтернатива что-то вроде, git stash && <your actual command> && git stash popно это отстой. Авто-полка и применение ближе к тому, что нам нужно.
Смодеть

1
@VonC похоже не то же самое - у меня есть случай использования, когда у проектов, которые я использую, есть настройки, которые мне нужны, которые не могут быть зафиксированы, потому что они «не являются стандартными». И еще полдюжины других случаев использования, с которыми я сталкивался, связанных с необходимостью изменения файлов сборки и т. Д. Для локальной разработки против dev / test / prod.
Смодеть

187

При использовании интегрированной среды разработки JetBrains с Git, «сохранение и снятие с хранения» поддерживается в дополнение к полочкам и небрежному хранению. Эти функции имеют много общего; основное различие заключается в способе создания и применения исправлений. Полка может работать как с отдельными файлами, так и с группой. файлов, в то время как Stash может работать только с целой кучей измененных файлов одновременно. Вот еще некоторые подробности о различиях между ними. "


10
Кажется, что полка более гибкая, чем git stash .
Дмитрий Давыдов

12
@DmitryDavydov Вот git stash -pчто превосходит оба. К сожалению только в командной строке.
Ви

1
@TheVee да, это очень похоже на полки с точки зрения функциональности, спасибо за информацию.
Дмитрий Давыдов

10
На самом деле, начиная с Git 2.13 (Q2 2017), вы можете хранить отдельные файлы ... читать дальше
kyb

5
Я нашел полку очень полезной, когда у вас есть патч изменений, которые вы хотите применить каждый раз, когда вы хотите автоматически сгенерировать документацию, например. Shelve создаст файл в .idea / shelve, и вы сможете добавить его в свою VCS и поделиться им со всей своей командой. чтобы они могли применить эти изменения и выполнить те же задачи.
ingkevin

64

В дополнение к предыдущим ответам есть одна важная для меня заметка:

shelveэто JetBrains продукты функция (например WebStorm, PhpStorm, PyCharmи т.д.). Это помещает отложенные файлы в .idea/shelfкаталог.

stashэто один из gitвариантов. Это помещает спрятанные файлы в .gitкаталог.


3
Спасибо за разъяснение этого критического вопроса.
AmerllicA

6

Я предпочел бы отложить изменения вместо того, чтобы хранить их, если я не делюсь своими изменениями в другом месте.

Копирование - это git-функция, которая не дает вам возможности выбирать определенные файлы или изменения внутри файла. Стеллажи могут сделать это, но это специфичная для IDE функция, а не функция git:

введите описание изображения здесь

Как вы видите, я могу указать, какие файлы / строки включить на мою полку. Обратите внимание, что я не могу сделать это с тайником.

Осторожно, использование полок в IDE может ограничить переносимость ваших исправлений, поскольку эти изменения не сохраняются в папке .git.

Некоторые полезные ссылки:

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.