"git checkout tag-name" vs "git reset --hard tag-name"

Я знаю, что есть такие вопросы, как , но это не то, о чем я прошу.

Я также знаю, что:

git checkout tag-name:

  • Отделяет вас от ветки. (т.е. перемещает указатель HEAD, сохраняет указатель BRANCH)

git reset --hard tag-name:

  • Не отделяет вас от ветки, но делает предыдущие коммиты "свисающими". (т.е. перемещает указатели HEAD и BRANCH)

Интересно, какой из них имеет смысл для обновления к тегу, т.е. если произведение будет сброшено или извлечено. Я знаю, что сборщик мусора может работать, удаляя оборванные коммиты, но опять же, если производство всегда "вытягивается" до процесса обновления в тег, я не вижу ничего плохого.

Должно ли производственное обновление тега с reset или checkout, учитывая, что a pull всегда выполняется до этого вызова обновления?

Ответы

Ответ 1

Интересно, какой из них имеет смысл для обновления тега

Ваша производственная установка должна проверять тег.

Подумайте об этом так: ваша производственная установка доступна только для чтения. git reset --hard tag-name изменит текущую отмеченную ветку.

В качестве альтернативы

Общепринятая практика заключается в том, что помимо создания тега у вас есть одна ветка, которая является просто последней версией. В этом случае вы, например, слияние для создания и создания тега; и на ваших производственных установках вы обновляете просто с помощью git pull (на master).