[git] Como modificar commits existentes e não processados?


12 Answers

git commit --amend
Question

Eu escrevi a coisa errada em uma mensagem de commit. Como alternativa, esqueci de incluir alguns arquivos.

Como posso alterar a mensagem / arquivos de commit? O commit ainda não foi enviado.




  1. Se você quiser apenas modificar sua última mensagem de commit, faça:

    git rebase -i HEAD~3
    

    Isso vai deixá-lo cair no seu exitor de texto e permitir que você altere a última mensagem de commit.

  2. Se você quiser alterar as últimas 3 mensagens de commit, ou qualquer uma das mensagens de commit até esse ponto, forneça HEAD~3 ao comando git rebase -i :

    git filter-branch -f --msg-filter \
    'sed "s/<old message>/<new message>/g"' -- --all
    



Usar

git commit --amend

Para entender em detalhes, um excelente post é 4. Reescrevendo a História do Git . Ele também fala sobre quando não usar o git commit --amend .




Para corrigir a confirmação anterior, faça as alterações desejadas e organize essas alterações e, em seguida, execute

git commit --amend -C HEAD

Isto irá abrir um arquivo em seu editor de texto representando sua nova mensagem de commit. Começa preenchido com o texto da sua antiga mensagem de commit. Altere a mensagem de confirmação desejada, salve o arquivo e saia do editor para concluir.

Para corrigir o commit anterior e manter a mesma mensagem de log, execute

git reset --hard HEAD^

Para corrigir o commit anterior removendo-o completamente, execute

git rebase -i HEAD~commit_count

Se você quiser editar mais de uma mensagem de confirmação, execute

git commit --amend
git rebase --continue

(Substitua commit_count pelo número de confirmações que você deseja editar). Esse comando inicia seu editor. Marque o primeiro commit (o que você quer mudar) como “edit” em vez de “pick”, depois salve e saia do seu editor. Faça a alteração que você deseja confirmar e execute

git commit -a --amend -m "My new commit message"

Nota: Você pode "Fazer a alteração desejada" também no editor aberto por git commit --amend




Se você estiver usando a GUI do Git, você pode alterar o último commit que não foi enviado:

git commit --amend -o -m "New commit message"



Eu uso o Git GUI o máximo que posso, e isso te dá a opção de alterar o último commit:

Além disso, git rebase -i origin/master é um bom mantra que sempre lhe apresentará os commits que você fez em cima do master, e lhe dará a opção de alterar, deletar, reordenar ou squash. Não há necessidade de se apossar desse hash primeiro.




Você também pode usar git filter-branch para isso.

git commit --amend -c <commit ID>

Não é tão fácil quanto um git commit --amend trivial, mas é especialmente útil, se você já tiver algumas mesclagens depois de sua mensagem errônea de commit.

Note que isto irá tentar reescrever TODOS os commit entre HEAD e o commit falho, então você deve escolher o seu comando msg-filter maneira muito sensata ;-)




Nesta questão, há muitas respostas, mas nenhuma delas explica detalhadamente como alterar mensagens de confirmação mais antigas usando o VIM. Eu estava preso tentando fazer isso sozinho, então aqui eu vou escrever em detalhes como eu fiz isso especialmente para pessoas que não têm experiência em VIM!

Eu queria mudar meus cinco últimos commits que eu já enviei para o servidor. Isso é muito 'perigoso' porque se alguém já tirou isso, você pode atrapalhar as coisas mudando as mensagens de commit. No entanto, quando você está trabalhando em seu próprio galho e tem certeza de que ninguém o puxou, você pode mudá-lo assim:

Digamos que você queira alterar seus cinco últimos commits e, em seguida, digite isso no terminal:

git rebase -i HEAD~5 * Onde 5 é o número de mensagens de confirmação que você deseja alterar. (então se você quiser mudar o 10º para o último commit você digita 10)

Este comando irá levá-lo para o VIM, onde você pode editar seu histórico de commit. Você verá seus últimos 5 commits no topo assim:

pick <commit hash> commit message

Em vez de pick você precisa escrever um novo reword . Você pode fazer isso no VIM digitando i , que faz você entrar no modo INSERT. (Você vê que você está no modo de inserção pela palavra INSERT na parte inferior) Para as confirmações que você deseja alterar digite reword em vez de pick

Então você precisa salvar e sair desta tela, você faz isso primeiro entrando no 'modo de comando' pressionando o botão esc. (você pode verificar se está no modo de comando se a palavra INSERT na parte inferior desaparecer). Em seguida, você pode digitar um comando digitando:, o comando para salvar e sair é wq . Então, se você digitar :wq você está no caminho certo.

Então o VIM vai passar por cima de cada mensagem de commit que você quer reformular, aqui você pode realmente mudar as mensagens de commit. Você fará isso entrando no modo INSERT, alterando a mensagem de confirmação, entrando no modo de comando e salvando e encerrando. Faça isso 5 vezes e você está fora do VIM!

Então, se você já enviou seus commits errados, você precisa git push --force para sobrescrevê-los. Lembre-se que o git push --force é uma coisa bastante perigosa para se fazer, então certifique-se de que ninguém tenha saído do servidor desde que você enviou seus commits errados!

Agora você mudou suas mensagens de commit!

(Como você vê, eu não sou tão experiente no VIM, então se eu usei o jargão errado para explicar o que está acontecendo, fique à vontade para me corrigir!)




Se você quiser apenas editar o último uso de commit:

git commit --amend -m 'one line message'

ou

git rebase -i <hash of one commit before the wrong commit>

Mas se você quiser editar vários commits seguidos, você deve usar o rebasing em vez disso:

git commit --amend

Em um arquivo como o acima, escreva edit / e ou uma das outras opções e pressione salvar e sair.

Agora você estará no primeiro commit errado. Faça alterações nos arquivos e eles serão organizados automaticamente para você. Tipo

git rebase --continue 

salvar e sair disso e digite

git commit --amend -o -m "New commit message"

para ir para a próxima seleção até terminar com todas as suas seleções.

Note que estas coisas mudam todos os seus hashes SHA após aquele commit em particular.




Eu gosto de usar o seguinte:

  1. git status
  2. git add --all
  3. git commit -am "message goes here about the change"
  4. git pull <origin master>
  5. git push <origin master>



Você pode usar o git-rebase-reword

Ele é projetado para editar qualquer commit (não apenas da última vez) como commit --amend

$ git rebase-reword b68f560
$ git rebase-reword HEAD^

É nomeado após a ação no rebase interativo para alterar um commit: "reword". Veja este post e man interactive mode-seção

Exemplos:

git commit --amend -m "T-1000, advanced prototype"
git push --force



Se você estiver usando a ferramenta Git GUI, existe um botão denominado emendar último commit. Clique nesse botão e, em seguida, ele exibirá seus últimos arquivos e mensagens de confirmação. Apenas edite essa mensagem e você poderá confirmá-la com uma nova mensagem de confirmação.

Ou use este comando em um console / terminal:

$ git rebase bbc643cd^ --interactive



Se você quiser apenas alterar sua última mensagem, use a sinalização --only ou seu atalho -o com commit --amend :

git commit --amend -m "your new commit message"

Isso garante que você não aprimore acidentalmente seu commit com material preparado. Claro que é melhor ter uma configuração adequada do $EDITOR . Então você pode deixar a opção -m fora e o git preencherá previamente a mensagem de commit com a antiga. Desta forma, pode ser facilmente editado.




Related