Hoje eu estava procurando nos logs um projeto e percebi que havia digitado o nome de uma tag há algum tempo. Existe alguma maneira de renomear a tag? O Google não encontrou nada útil.
Sei que pude verificar a versão marcada e criar uma nova tag, até tentei isso. Mas isso parece criar um objeto de tag que não está certo. Para um,
git tag -l
lista fora de ordem em relação a todas as outras tags. Não tenho idéia se isso é significativo, mas isso me leva a acreditar que o novo objeto de tag não é exatamente o que eu quero. Eu posso viver com isso, porque realmente me importo apenas que o nome da tag corresponda à documentação, mas prefiro fazê-lo "certo", assumindo que haja uma maneira correta de fazer isso.
git log --oneline --decorate --graph
é útil ao limpar tags.Respostas:
Aqui está como renomeio uma tag
old
paranew
:Os dois pontos no comando push removem a marca do repositório remoto. Se você não fizer isso, o Git criará a tag antiga na sua máquina quando você puxar.
Por fim, verifique se os outros usuários removem a tag excluída. Diga a eles (colegas de trabalho) para executar o seguinte comando:
Observe que, se você estiver alterando uma tag anotada , precisará garantir que o novo nome da tag esteja referenciando a confirmação subjacente e não o antigo objeto de tag anotada que você está prestes a excluir. Portanto, use em
git tag -a new old^{}
vez degit tag new old
(isso ocorre porque as tags anotadas são objetos e as tags leves não, mais informações nesta resposta ).fonte
git push origin :refs/tags/old
pode ser simplificado,git push origin :old
eu acho.git tag new old
criará uma marca apontando para a marca antiga, não para a confirmação da marca antiga. (Veja Por que não posso conferir meu tag de Git GUI? )A pergunta original era como renomear uma tag, o que é fácil: primeiro crie NEW como um apelido de OLD:
git tag NEW OLD
depois exclua OLD:git tag -d OLD
.A citação sobre "o caminho do Git" e a (in) sanidade está fora da base, porque se trata de preservar um nome de marca, mas fazendo com que se refira a um estado de repositório diferente.
fonte
git push origin
negócios.git tag new old
criará uma marca apontando para a marca antiga, não para a confirmação da marca antiga. (Veja Por que não posso conferir meu tag de Git GUI? )Além das outras respostas:
Primeiro, você precisa criar um alias do nome da tag antiga , apontando para o commit original:
Então você precisa excluir o antigo localmente :
Em seguida, exclua a tag em seus locais remotos:
Finalmente, você precisa adicionar sua nova tag ao local remoto. Até você fazer isso, as novas tags não serão adicionadas:
Repita isso para todos os locais remotos.
Esteja ciente das implicações que uma alteração no Git Tag tem para os consumidores de um pacote!
fonte
git tag new old
criará uma marca apontando para a marca antiga, não para a confirmação da marca antiga. (Veja Por que não posso conferir meu tag de Git GUI? )git tag new old^{}
, não precisamosgit tag new_tag_name old_tag_name
(o primeiro passo).Se for publicado, você não poderá excluí-lo (sem correr o risco de ser asfaltado e difuso). A 'maneira Git' é fazer:
Alternativamente,
É tão insano porque:
Toda cortesia das páginas de manual .
fonte
Esta página da wiki possui uma linha interessante, que nos lembra que podemos enviar várias referências :
Portanto, a ideia é pressionar:
<new-tag>
para cada commits referenciados por<old-tag
>:<refs/tags/old-tag>:<refs/tags/new-tag>
,<old-tag>
::<refs/tags/old-tag>
Veja como um exemplo " Alterar a convenção de nomenclatura de tags dentro de um repositório git? ".
fonte
git cat-file -p <tag>
; com seu método no meu sistema, recebo a tag 'renomeada' ref (<new-tag>
), mas seu campo de tag ainda é<old-tag>
.Como um complemento para as outras respostas, adicionei um alias para fazer tudo em uma única etapa, com uma sensação mais familiar do comando * nix move. Argumento 1 é o nome da marca antiga, argumento 2 é o novo nome da marca.
Uso:
fonte
!sh
(pergunta foi sobre o Windows Git), no entanto, depois de atualizar o formato para o seguinte, funcionou:renametag = "!f() { git tag $2 $1; git tag -d $1; git push origin :refs/tags/$1; git push --tags; }; f"
.Siga a abordagem em três etapas para um ou alguns números de tags.
Etapa 1: Identifique o ID do objeto / confirmação do commit que a tag atual está apontando
Etapa 2: excluir a tag do repositório
Etapa 3: crie uma nova tag apontando para o mesmo ID de confirmação que a tag antiga estava apontando para
Quando o git local estiver pronto com a alteração do nome da tag, essas alterações poderão ser enviadas de volta à origem para que outras pessoas as aceitem.
fonte
git push origin :refs/tags/v0.1.0-Demo
e empurrar as etiquetas para trás (com outras coisas pendentes)git push --tags
Para os aventureiros, isso pode ser feito em um comando:
fonte
git gc
cp
), com a mensagem do mantenedor intocada.Independentemente dos problemas relacionados ao envio de tags e renomeação de tags que já foram enviadas, caso a tag a renomear seja uma anotada , primeiro você poderá copiá-la graças à seguinte linha de comando de linha única:
Então, você só precisa excluir a tag antiga:
Encontrei esta linha de comando graças às duas respostas a seguir:
Edit:
Depois de ter encontrado problemas com sincronização automática de etiquetas de configuração
fetch.pruneTags=true
(como descrito na https://stackoverflow.com/a/49215190/7009806 ), eu, pessoalmente, sugiro que primeiro copie o novo tag no servidor e , em seguida, apagar o antigo. Dessa forma, a nova tag não é excluída aleatoriamente ao excluir a tag antiga e a sincronização das tags gostaria de excluir a nova tag que ainda não está no servidor . Então, por exemplo, todos juntos temos:fonte
Você também pode renomear tags remotas sem retirá-las, duplicando a tag / ramificação antiga para um novo nome e excluindo o antigo, em um único
git push
comando.Tag de mudança de nome remoto / ramo remoto → conversão tag: (Aviso:
:refs/tags/
)Renomeação ramo remoto / tag remoto → conversão ramo: (Aviso:
:refs/heads/
)Saída renomeando uma tag remota:
fonte