Будут ли потеряны ссылки на теги, недоступные из какой-либо ветви?
Я работал над моим проектом, над филиалом 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