Editar commit antigo do git
Editar commit antigo do git
Se você cometeu algum erro em um commit anterior do git e quer editá-lo, você pode usar o git rebase para isso.
Não é recomendado se você já subiu com git push
tl;dr git rebase -i COMMITHASH
Vou explicar como fazer com um exemplo completo:
Criando o cenário
Com os comandos abaixo, você terá três commits.
git init
echo "first commit" > file0.txt
git add .
git commit -m "first commit"
echo "some code
password forgotten
more code" > file1.txt
git add .
git commit -m "commit 1"
echo "more code" > file2.txt
git add .
git commit -m "commit 2"
Temos três arquivos (file0.txt, file1.txt e file2.txt), mas um deles tem a senha escrita que foi adicionado no “commit 1”.
git rebase
Podemos usar o git rebase com hash ou então há 2 commits atrás.
git rebase -i HEAD^2
# OR
git rebase -i COMMIT_1_HASH
Você verá algo assim (com hash diferente);
pick 3aa4948 commit 1
pick 9e5aadf commit 2
# More code, even explaining the options
Nós queremos editar o “commit 1”, então vamos mudar de pick para edit no “commit 1”:
edit 3aa4948 commit 1
pick 9e5aadf commit 2
Poderíamos ter utilizado apenas
e
ao invés deedit
.
E agora estamos no “commit 1”. Vamos remover a linha password forgotten
e refazer o commit.
echo "some code
more code" > file1.txt
git add .
git commit --amend # We are editing an existent commit
E está pronto. Nós precisamos deixar o git continuar o processo com o comando git rebase --continue
.
Você verá a seguinte mensagem: Successfully rebased and updated refs/heads/master.
E agora está pronto para o push
.
Cuidado
Se você já fez push
antes, provevalmente terá problemas. É melhor editar o arquivo (e mudar sua própria senha).
Nota sobre o primeiro commit
O primeiro commit não é importante. Por que eu o adicionei? Porque o git rebase seria um pouco diferente.
Se você tentar git rebase -i HEAD~3
terá o seguinte erro:
fatal: Needed a single revision
invalid upstream 'HEAD~3'
Precisaria no caso usar git rebase -i --root
.