Eu criei uma tag no ramo mestre chamada v0.1
assim:
git tag -a v0.1
Mas então eu percebi que ainda havia algumas mudanças que eu precisava mesclar no master para a versão 0.1, então eu fiz isso. Mas agora minha v0.1
tag está presa (para invocar a analogia do post-it note) no commit errado. Eu quero que ele fique preso no commit mais recente no master, mas em vez disso, ele estará preso no segundo commit mais recente no master.
Como posso movê-lo para o commit mais recente no mestre?
git push origin :refs/tag/<tagname>
e então façagit tag -fa <tagname>
e depoisgit push origin master --tags
. Caso contrário, você poderá terminar com coisas estranhas na lista de referências no controle remoto, com ^ e {} caracteres sendo anexados. Agradecemos a Dan no codebasehq.com por apontar isso.:refs/tag/<tagname>
disso deveria ser:refs/tags/<tagname>
.git push -f origin <tagname>
Mais precisamente, você deve forçar a adição da tag e pressionar com a opção --tags e -f:
fonte
Para resumir se o seu controle remoto é chamado
origin
e você está trabalhando namaster
ramificação:Você também pode trocar a linha 4 para
git push origin --tags
enviar todas as alterações com tags das alterações locais.Baseando-se nas respostas @ stuart-golodetz, @ greg-hewgill, @eedeep, @ ben-hocking, comentários abaixo de suas respostas e comentários NateS abaixo de minha resposta.
fonte
Exclua-o
git tag -d <tagname>
e recrie-o na confirmação correta.fonte
Eu tento evitar algumas coisas ao usar o Git.
Usando o conhecimento dos internos, por exemplo, refs / tags. Tento usar apenas os comandos Git documentados e evito usar coisas que exijam conhecimento do conteúdo interno do diretório .git. (Ou seja, trato o Git como um usuário do Git e não como desenvolvedor do Git.)
O uso da força quando não é necessário.
Exagerando nas coisas. (Empurrando um ramo e / ou muitas tags, para obter uma tag onde eu quiser.)
Então, aqui está minha solução não violenta para alterar uma tag, local e remotamente, sem o conhecimento dos componentes internos do Git.
Eu o uso quando uma correção de software apresenta um problema e precisa ser atualizada / relançada.
github
é um nome remoto de amostra,fix123
é um nome de marca de amostra e790a621265
uma confirmação de amostra.fonte
Vou deixar aqui apenas outra forma deste comando que atendeu às minhas necessidades.
Havia uma etiqueta
v0.0.1.2
que eu queria mover.E depois:
fonte
Uma outra maneira:
Mova a tag no repositório remoto (substitua HEAD por qualquer outro, se necessário).
Buscar alterações de volta.
fonte
Alias para mover uma tag para uma confirmação diferente.
Na sua amostra, para mover a consolidação com o hash e2ea1639, faça:
git tagm v0.1 e2ea1639
.Para tags enviadas, use
git tagmp v0.1 e2ea1639
.O alias mantém a data e a mensagem originais. Se você usar
git tag -d
você perdeu sua mensagem original.Salve-os em seu
.gitconfig
arquivofonte
Se você deseja mover uma tag anotada, alterando apenas a confirmação direcionada, mas preservando a mensagem de anotação e outros metadados, use:
use: moveTag <tag-to-move> <target>
A função acima foi desenvolvida referenciando teerapap / git-move-annotated-tag.sh .
fonte
git tag -f -a my_tag
já preserva a mensagem de uma mensagem anterior (com a versão 2.11.0 do git).