Будут ли потеряны ссылки на теги, недоступные из какой-либо ветви?

Я работал над моим проектом, над филиалом branch, Затем я вернулся с помощью

git revert tag-name

Тогда я сделал некоторый прогресс и посвятил себя. Когда я пытаюсь нажать, я получаю эту ошибку:

Обновления были отклонены, потому что удаленный содержит работу, которой у вас нет локально

Я не хочу терять свой прогресс до возвращения, но хочу удалить из branch коммиты, сделанные после, сохраняя их доступными для дальнейшего использования только под 1.00.00rcXX тег.

Я создал клон репозитория, помеченный головой branch там и перематывать branch чтобы отменить коммит:

git tag -a 1.00.00rcXX -m message
git reset --hard HEAD~1 # remove last commit from current branch

Теперь я хочу принудительно перенести мои изменения обратно в исходный репозиторий, так что все коммиты впереди branch будет потеряно.

Будет ли мой тег тоже потерян, так как он основан на коммитах, недоступных из branch ?

1 ответ

Решение

Недоступность и сборка мусора

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

квотирование man gitglossary:

недоступный объект

Объект, который недоступен из ветви, тега или любой другой ссылки.

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

Нажатие на ярлык и принудительное нажатие на ветку безопасны

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

Просто запустите это:

git push --tags
git push -f origin your-rewound-branch

Лучше использовать ветку вместо тега

Кстати, использование тега для такой вещи, вероятно, не очень хорошая идея. Возможно, вы захотите когда-нибудь удалить эту тупиковую часть истории разработки, чего не следует делать с тегами. Использование ветки (головы) вместо тега больше подходит для такой цели. Просто используйте (возможно, с более наглядным названием)

git branch 1.00.00rcXX

вместо

git tag -a 1.00.00rcXX -m message
Другие вопросы по тегам