Eu fiz um commit do git e um push subsequente. Gostaria de mudar a mensagem de confirmação. Se eu entendi corretamente, isso não é aconselhável, porque alguém pode ter retirado do repositório remoto antes que eu faça essas alterações. E se eu souber que ninguém puxou?
Existe uma maneira de fazer isso?
Respostas:
Mudando o histórico
Se for o commit mais recente, você pode simplesmente fazer o seguinte:
Isso exibe o editor com a última mensagem de confirmação e permite editar a mensagem. (Você pode usar
-m
se quiser apagar a mensagem antiga e usar uma nova.)Empurrando
E então, quando você pressionar, faça o seguinte:
Ou você pode usar "+":
Ou você pode usar
--force
:Tenha cuidado ao usar esses comandos.
Se alguém empurrou as alterações para o mesmo ramo, você provavelmente evitará destruí-las. A
--force-with-lease
opção é a mais segura, porque será cancelada se houver alguma alteração upstream (Se você não especificar o ramo explicitamente, o Git usará as configurações padrão de envio. Se a configuração padrão de envio for "correspondente", você poderá destruir as alterações em várias ramificações ao mesmo tempo.
Puxar / buscar depois
Qualquer pessoa que já tenha recebido uma mensagem de erro receberá uma atualização e precisará atualizar (assumindo que não está fazendo nenhuma alteração) fazendo algo assim:
Tenha cuidado ao usar
reset --hard
. Se você tiver alterações na ramificação, essas alterações serão destruídas.Uma observação sobre a modificação do histórico
Os dados destruídos são realmente apenas a mensagem de confirmação antiga, mas
--force
não sabem disso e, com prazer, excluirão outros dados também. Então, pense--force
como "Quero destruir dados e sei com certeza que dados estão sendo destruídos". Porém, quando os dados destruídos são confirmados, geralmente é possível recuperar confirmações antigas do reflog - os dados são realmente órfãos em vez de destruídos (embora as confirmações órfãs sejam excluídas periodicamente).Se você não acha que está destruindo dados, fique longe de
--force
... coisas ruins podem acontecer .É por isso que
--force-with-lease
é um pouco mais seguro.fonte
git push --force
sem as opções <repository> e <branch> também funciona, se você tiver configurado o upstream.<repository>
? É issoorigin
?org/repo
? Ou apenasrepo
?Apenas diga :
e depois
fonte
git push origin <BRANCH-NAME>
não funcionou, tive que usargit push --force
como explicado na resposta aceita.git push --force
, ou então o impulso não passa.Para editar uma confirmação diferente da mais recente:
Etapa 1 :
git rebase -i HEAD~n
realizar uma nova rebarba interativa para os últimosn
commit afetados. (ou seja, se você deseja alterar uma mensagem de confirmação 3 confirmada, façagit rebase -i HEAD~3
)O git abrirá um editor para lidar com esses commits, observe este comando:
é exatamente isso que precisamos!
Passo 2 : Mudar
pick
parar
para aqueles commits que você deseja atualizar a mensagem. Não se preocupe em alterar a mensagem de confirmação aqui, ela será ignorada. Você fará isso no próximo passo. Salve e feche o editor.Observe que, se você editar o seu plano de rebase, ele ainda não iniciará o processo de renomear os arquivos, execute:
Se você deseja alterar o editor de texto usado para a sessão interativa (por exemplo, do padrão vi para nano), execute:
Etapa 3 : O Git abrirá outro editor para todas as revisões que você colocou
r
antes. Atualize a mensagem de confirmação como desejar e salve e feche o editor.Etapa 4 : Depois que todas as confirmações, as mensagens são atualizadas. você pode querer fazer
git push -f
para atualizar o controle remoto.fonte
git rebase -i HEAD~3
git rebase --continue
. E se você deseja alterar o editor de texto usado para a sessão interativa (por exemplo, do padrãovi
paranano
), executeGIT_EDITOR=nano git rebase -i HEAD~n
.Use estas duas etapas no console:
e depois
Feito :)
fonte
Deve-se notar que, se você usar
push --force
com várias referências, todas elas serão modificadas como resultado. Certifique-se de prestar atenção para onde seu repositório git está configurado para enviar. Felizmente, existe uma maneira de proteger um pouco o processo, especificando uma única ramificação para atualizar. Leia as páginas de manual do git:fonte
Se você deseja modificar um mais antigo commit, não o último, você precisará usar
rebase
o comando como explicado aqui, Github página de ajuda , no rectificativo a mensagem da mais velha ou múltipla cometer mensagens secçãofonte
Comando 1 .
Então,
Comando 2 .
fonte
edite e altere a mensagem na janela atual. Depois disso
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 o processo, 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
git commit -m “fixed feature A”
(Vamos supor que o git dê a ele um ID de confirmação do e3ab7312 ... ... (mais tarde você perceberá que sua mensagem estava incorreta, faça uma alteração inconseqüente em um arquivo, como adicionar um espaço ao arquivo leia-me ou use a—allow-empty
opção git). ..git commit -m “Errata commit for previous commit e3ab7312... original message should have been ‘fixed feature *B*’
'' 'git notes
isso serviria ao mesmo propósito que um "commit de errata". Basta adicionar uma nota a um commit anterior para anotar ou corrigir eventuais erros na mensagem de commit:https://git-scm.com/docs/git-notes
Isso funciona para mim muito bem,
origem / nome da filial do git checkout
se você já está no ramo, é melhor puxar ou refazer
ou
Mais tarde você pode simplesmente usar
ou se você deseja abrir o editor de texto, use
Eu prefiro usar o editor de texto se você tiver muitos comentários. Você pode definir seu editor de texto preferido com o comando
De qualquer forma, quando terminar de alterar a mensagem de confirmação, salve-a e saia
e depois corra
E você terminou
fonte
informações adicionais para o mesmo problema se você estiver usando o pipeline de bitbucket
edite sua mensagem
empurrar para o sever
adicione --force ao seu comando push no pipeline
Isso excluirá o (s) seu (s) commit (s) anterior (es) e enviará o seu atual.
eu tentei no pipeline de bitbucket e está funcionando bem
fonte