Existe uma maneira de editar uma mensagem de confirmação após confirmar e enviar para o GitHub? Vejo que há um 'adicionar uma nota', bem como comentários embutidos, mas nenhuma edição real de uma mensagem de confirmação. Também há 'alterar confirmação' nas extensões git, mas isso não edita a mensagem existente.
129
Respostas:
git rebase -i <commit hash you want to change>^
Isso abrirá seu editor padrão (geralmente vi ) com uma lista de confirmações e ações para cada uma. Por padrão, a ação é
pick
.Para qualquer confirmação que você deseja alterar a mensagem, altere
pick
parareword
.Salve e saia (no vi:)
:wq
.Para cada confirmação, você receberá um editor para editar a mensagem de confirmação. Altere-o como achar melhor, salve e saia.
Quando terminar de editar todas as mensagens de confirmação, você retornará ao prompt de comando e terá uma nova árvore com as mensagens atualizadas.
Agora você pode enviá-los para o github usando
git push origin --force
.Se você apenas precisar corrigir seu último commit, poderá substituir as etapas de 1 a 4 por
git commit --amend
.fonte
^
lá - eu realmente sugeri uma nova alteração no pai do commit que você deseja alterar.^^
para finalizar o comando com um literal,^
por exemplo:git rebase -i 2c747b32^^
No Intellij Idea, você pode fazer isso com muita facilidade.
fonte
git push origin --force
posteriormente, conforme sugerido na resposta do @ Mureinik.Premissa:
se o seu gráfico git se parecer com ...
(
df9c192
eb7ec061
são os hashes de confirmação de destino e confirmação de pai, separadamente)Solução:
basta digitar as seguintes instruções ...
Explicação:
git reset --soft b7ec061
manterá suas alterações de arquivos e redefinirá para commit-parent (ou seja, b7ec061)git commit -m "..."
criará localmente um novo commitgit push -f
enviará seu novo commit ao servidor e substituirá o antigo (por exemplo, df9c192)fonte
Outra opção é criar uma "confirmação de errata" adicional (e push) que faça referência ao objeto de confirmação que contém o erro - a nova confirmação de errata também fornece a correção. Uma confirmação de errata é uma confirmação sem alterações substanciais no código, mas com uma mensagem importante de confirmação - por exemplo, adicione um caractere de espaço ao seu arquivo leia-me e confirme essa alteração com a importante mensagem de confirmação ou use a opção git
--allow-empty
. É certamente mais fácil e seguro do que refazer a nova versão, não modifica o histórico verdadeiro e mantém a árvore do ramo limpa (usandoamend
também é uma boa opção se você estiver corrigindo a confirmação mais recente, mas uma confirmação de errata pode ser uma boa opção para confirmações mais antigas). Esse tipo de coisa ocorre tão raramente que simplesmente documentar o erro é bom o suficiente. No futuro, se você precisar pesquisar em um log git uma palavra-chave de recurso, a confirmação original (incorreta) poderá não aparecer porque a palavra-chave errada foi usada nessa confirmação original (o erro de digitação original) - no entanto, a palavra-chave aparecerá na confirmação da errata, que apontará para o commit original que teve o erro de digitação. Aqui está um exemplo:fonte
A resposta de @Mureinik é boa, mas não é compreensível para iniciantes.
Primeiro método:
git commit --amend
:pick
, esta já é a página de edição e você pode editar diretamente a mensagem principal e salvar e sair , por exemplo:git push -u origin master --force
ou<how you push normally> --force
. A chave aqui é--force
.Segundo método:
Você pode ver o hash de confirmação
git log
ou extrair do URL do repositório, o exemplo no meu caso é881129d771219cfa29e6f6c2205851a2994a8835
Então você pode fazer
git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835
ougit rebase -i HEAD^
(se for o mais recente)Você veria:
noop
, provavelmente está digitando errado, por exemplo, se você fizer algumagit rebase -i 881129d771219cfa29e6f6c2205851a2994a88
falta^
no final, é melhor sair do editor sem salvar e descobrir o motivo:noop
problema, simplesmente altere a palavrapick
parareword
, restará apenas outro (você não edita a mensagem de confirmação neste momento), por exemplo:git push -u origin master --force
ou<how you push normally> --force
. A chave aqui é--force
.Para mais informações, leia o documento .
fonte