Quero modificar uma mensagem de confirmação mais profunda na história e enviei muitas novas confirmações.
Como altero a mensagem de confirmação? É possível?
fonte
Quero modificar uma mensagem de confirmação mais profunda na história e enviei muitas novas confirmações.
Como altero a mensagem de confirmação? É possível?
A mensagem de Linus Torvalds pode responder à sua pergunta:
Modificar / editar mensagens de confirmação antigas
Resposta curta: você não pode (se pressionado).
extrato (Linus se refere ao BitKeeper como BK):
Nota lateral, apenas por interesse histórico: em BK você poderia.
E se você está acostumado (como eu), foi realmente bastante prático. Eu aplicaria uma bomba de remendo de Andrew, notaria que algo estava errado e a editaria antes de empurrá-la para fora.
Eu poderia ter feito o mesmo com o git. Teria sido fácil o suficiente fazer com que apenas a mensagem de confirmação não fizesse parte do nome e ainda assim garantir que o histórico não foi tocado e permitir a coisa "corrigir comentários mais tarde".
Mas eu não fiz.
Parte disso é puramente "consistência interna". O Git é simplesmente um sistema mais limpo , graças a tudo ser protegido por SHA1 e a todos os objetos serem tratados da mesma forma, independentemente do tipo de objeto. Sim, existem quatro tipos diferentes de objetos, e todos são realmente diferentes, e não podem ser usados da mesma maneira, mas ao mesmo tempo, mesmo que sua codificação possa ser diferente no disco, conceitualmente todos funcionam exatamente o mesmo.
Mas a consistência interna não é realmente uma desculpa para ser inflexível, e claramente seria muito flexível se pudéssemos corrigir os erros depois que eles acontecessem. Portanto, esse não é um argumento muito forte.
A verdadeira razão pela qual o git não permite alterar a mensagem de confirmação acaba sendo muito simples: dessa forma, você pode confiar nas mensagens. Se você permitir que as pessoas as alterem posteriormente, as mensagens não são inerentemente muito confiáveis.
Para concluir, você pode reescrever o histórico de consolidação local para refletir o que deseja, conforme sugerido por sykora (com algumas alterações e redefinições --hard, gasp!)
No entanto, depois de publicar seu histórico revisado novamente (com a git push origin +master:master
, o +
sinal forçando a ocorrência do envio, mesmo que não resulte em uma confirmação "de avanço rápido") ... você pode ter problemas .
Extraia desta outra questão SO:
Na verdade, uma vez empurrei o --force para o repositório git.git e fui repreendido por Linus BIG TIME. Isso criará muitos problemas para outras pessoas. Uma resposta simples é "não faça".
Atualmente, uma substituição do git pode fazer o truque.
Em detalhes: criar uma ramificação de trabalho temporária
Redefinir para confirmar para substituir
Alterar o commit com a mensagem certa
Substitua o antigo commit pelo novo
volte para o ramo onde você estava
remover ramo temporário
empurrar
feito.
fonte
Você pode usar
git rebase -i
(contra o ramo de onde você ramificou) 'i' para interativo.Substitua o
pick
próximo ao comentário de confirmação com o qual deseja alterarr
(oureword
), salve e saia e, ao fazer isso, você poderá fazer a edição.git push
mais uma vez e pronto!fonte
-p
argumento derebase
quaisp
reservas são mescladas.Suponha que você tenha uma árvore como esta:
Primeiro,
checkout
um ramo temporário:Na
temp
ramificação,reset --hard
para um commit que você deseja alterar sua mensagem (por exemplo, esse commit é946992
):Use
amend
para alterar a mensagem:Depois disso, a árvore ficará assim:
Então,
cherry-pick
toda a cometer esse é antes de946992
partirmaster
paratemp
e cometê-los, useamend
se você deseja alterar as suas mensagens, bem como:A árvore agora fica assim:
Agora force o push do branch temp para controle remoto:
A etapa final, exclua a ramificação
master
no local,git fetch origin
para extrair a ramificaçãomaster
do servidor, depois alterne para ramificaçãomaster
e exclua a ramificaçãotemp
.Agora, tanto o local quanto o remoto, terão todas as mensagens atualizadas.
fonte
Em nossa loja, introduzi a convenção de adicionar tags anotadas com nomes reconhecíveis para confirmar com mensagens incorretas e usar a anotação como substituta.
Mesmo que isso não ajude as pessoas que executam comandos casuais "git log", ele nos fornece uma maneira de corrigir referências incorretas de rastreadores de erros nos comentários, e todas as minhas ferramentas de compilação e lançamento entendem a convenção.
Obviamente, essa não é uma resposta genérica, mas pode ser algo que as pessoas possam adotar em comunidades específicas. Tenho certeza que se for usado em uma escala maior, algum tipo de suporte de porcelana poderá surgir, eventualmente ...
fonte
(De http://git.or.cz/gitwiki/GitTips#head-9f87cd21bcdf081a61c29985604ff4be35a5e6c0 )
Eu acho que isso deveria responder sua pergunta. No entanto, observe que, se você empurrou o código para um repositório remoto e as pessoas o retiraram, isso atrapalha o histórico de códigos e o trabalho que eles fizeram. Então faça com cuidado.
fonte
Se você estiver usando extensões Git: vá para a tela Confirmar, deve haver uma caixa de seleção que diz "Alterar confirmação" na parte inferior, como pode ser visto abaixo:
fonte