git применить тайник без номера индекса

#git

#git

Вопрос:

Есть ли способ, с помощью которого я могу применить тайник, используя его имя? Я получил список тайников, как показано ниже, и я хотел бы применить тайник @{0}.

 stash@{0}: On support.1.5: NoGoMod
stash@{1}: On feature/WORK-7929: 6Aug
stash@{2}: On support.1.5: 17Jul
stash@{3}: On WORK-7739: temp
  

Я могу применить его с его номером индекса, например ( git stash apply "stash@{0}" ) , однако есть ли способ применить его с его именем… например. git stash применить «stash @{NoGoMod}» или что-то подобное этому?

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

 stash@{0}: On support.1.5: NewStash
stash@{1}: On support.1.5: NoGoMod
stash@{2}: On feature/WORK-7929: 6Aug
stash@{3}: On support.1.5: 17Jul
stash@{4}: On WORK-7739: temp
  

Если тайник не может быть применен с его именем, то есть ли какой-либо способ сохранить его номер индекса постоянным? Есть ли способ, с помощью которого новый тайник добавляется в конец списка, а мой существующий индексный номер тайника не изменяется?

Спасибо в ожидании

Ответ №1:

Список тайников представляет собой стек. Это означает, что каждый новый тайник «помещается» в стек. Так что нет, нет способа предотвратить изменение нумерации; самый последний тайник всегда равен нулю, по самому определению стека.

Тайник не имеет «имени» больше, чем сообщение, которое вы включаете в коммит, является его «именем». Коммит однозначно идентифицируется по имени, если на него указывает ветвь или тег; в противном случае он идентифицируется по его идентификационному номеру SHA. Аналогично, тайник в стеке тайников идентифицируется по его месту в стеке.

(Меня так и подмывает добавить: если вам это не нравится, не используйте тайники. На мой взгляд, тайники — это работа дьявола. Они не должны использоваться для временного хранения состояния ветки; для этого и нужен коммит. Если вы хотите сказать «держите мое место», создайте временную ветку и зафиксируйте. Теперь у вас есть что-то с именем, к которому вы всегда можете вернуться. Тайники предназначены только для чрезвычайных ситуаций, когда индекс отличается от рабочего дерева, и на это нет времени, поэтому вам нужно сохранить состояние рабочего дерева отдельно от индекса.)

Ответ №2:

Запись тайника — это специальная ссылка, которая указывает на фиксацию. Таким образом, вы можете просто пометить коммит.

 # after "git stash", tag the last entry
git tag foo stash@{0}

# later use the tag name
git stash apply foo
  

Вы можете создать псевдоним или функцию bash для объединения git stash и git tag .

С тегом есть еще несколько преимуществ для редких случаев.

  1. Запись тайника все еще существует, даже если она была удалена или извлечена из стека тайника. С помощью тега вы можете легко применить его git stash apply foo .

  2. Вы можете перенести тег в другие репозитории, чтобы там можно было применить запись тайника.