У меня есть коммит с тегом, но когда я вношу в него какие-либо изменения, тег теряется. Я не новичок в git, но до сих пор не могу понять, как он работает.
Я пробовал:
git commit --amend --no-edit
git commit --amend --no-post-rewrite
git commit --reuse-message=HEAD -C HEAD
Коммиты не могут быть переписаны. Вы можете только делать новые коммиты и заменять старые. См. мой ответ на вопрос: Что такое идентификатор фиксации Git? понять почему.
Если у вас есть это...
A - B - C [HEAD][tag]
После того, как вы внесете исправление, у вас будет вот это.
A - B - C [tag]
\
C1 [HEAD]
Совершенно новый коммит со своим собственным идентификатором коммита. Git не перемещает тег за вас.
Вы можете написать небольшой скрипт, который проверяет, есть ли у текущего коммита какие-либо теги (git tag --points-at
), вносит поправки, а затем перемещает тег в новый коммит (git tag -f <tag>
). Затем вы можете вызвать это git-commit-amend
(если это git-something
), поместить его в свой PATH, и оно будет доступно как git commit-amend
.
Тег — это указатель на хэш. Так что вам придется изменить тег