Сколько/сколько времени сохраняются при помощи git?

Я очень новичок в git и у меня есть вопрос о том, как сшить. Если я работал над веткой, но не смог добраться до позиции, где я могу зафиксировать ветку, то правильная вещь для использования. Мои вопросы, касающиеся тиснения:

  • Сколько сохраненных закладок сохраняется?
  • Как долго сохраняются эти заготовки?
  • Они просто временно сохраняют работу таким образом, что изменения теряются при перезагрузке компьютера?

Если кто-то может быстро помочь в разъяснении, это будет действительно оценено.

Ответ 1

1 - How many stashes are saved?

Тайники не появляются из воздуха; только если вы создаете их, используя

git stash

или, что то же самое,

git stash save

Так сколько же сохранено? Столько, сколько вы создаете.

2 - Как долго хранятся эти stashи?

Этот вопрос выглядит невинным, но ответ на самом деле довольно тонкий. Здесь необходимо рассмотреть два аспекта: 1) stash журналов и 2) база данных объекта репозитория.

Когда вы создаете stash, Git

  • добавляет запись в журнал хранения stashов,
  • создает два (три, если вы используете флаг --include-untracked) объекта фиксации в базе данных репозитория: один соответствует WIP (работа в процессе) в вашем рабочем дереве, а другой соответствует состоянию вашей промежуточной области (он же индекс)).

Редактировать: эти объекты коммитов являются добросовестными коммитами, что можно проверить, запустив на них git cat-file -t. Они просто не достижимы ни от одной ветки; см. комментарий torek.

По умолчанию сборщик мусора Git автоматически удаляет записи reflog старше 90 дней; Вы можете указать другое "время жизни" для записей stash reflog, запустив

git config gc.refs/stash.reflogexpire <lifetime>

Однако , как отмечает Торек, Git обрабатывает stashи специально - даже если старые записи reflog обычно удаляются автоматически, Git никогда не удалит записи reflog для refs/stash, если вы явно не скажете это.

Другими словами, Git не удаляет stashи самостоятельно; stash останется в вашем локальном хранилище до тех пор, пока вы добровольно не сделаете это

  • бросьте его, используя

    git drop <stash-reference>
    

    который удаляет указанную запись stashа из журнала ссылок;

  • вставьте его, используя

    git pop <stash-reference>
    

    который применяет указанный stash, а затем удаляет соответствующую запись из рефлога stashа; или

  • запустить

    git stash clear
    

который удаляет все записи из хранилища reflog (будьте осторожны с этим).

Однако следует помнить, что эти три действия влияют только на stash. В частности, они не вызывают немедленного удаления связанных объектов "WIP" и "index" из базы данных вашего хранилища; они просто делают эти объекты недоступными. Последние некоторое время будут находиться в "хранилище неопределенности", пока в конце концов не соберут мусор и не умрут "настоящей смертью".

Это полезно знать: если вы случайно уроните stash, вы все равно сможете извлечь его из недр вашего репо, если сможете вспомнить или идентифицировать SHA двух его объектов (WIP и индекс).

3 - Они просто временно сохраняют работу, так что изменения теряются при перезагрузке компьютера?

Нет. Тайники ничем не отличаются от любых других объектов коммитов; перезагрузка не влияет на них.

Ответ 2

Git stashes сохраняются до тех пор, пока ваш жесткий диск не умрет (в отличие от коммитов, которые обычно передаются на какой-либо другой компьютер через git push, так что это приведет к сбою жесткого диска).

У вас может быть столько задержек, сколько захотите. Избавьтесь от старых, когда вам это нравится, запустив git stash drop или git stash clear (прочитайте документы для них).