Excluindo um commit do git

Ao trabalhar com o Git, você descobrirá que às vezes os commits precisam ser removidos porque introduziram um bug ou precisam ser retrabalhados.

Se for o último commit é muito direto. Simplesmente execute:

git reset HEAD^

Isso irá mostrar o último commit, mas deixará todas as suas alterações nos arquivos intactas.

Se você precisa deletar mais do que apenas o último commit, existem dois métodos que você pode usar. O primeiro é usar o rebase, o que permitirá que você remova um ou mais commits consecutivos; o outro é escolhido a dedo, que permite remover commits não consecutivos.

Exemplo de log git

Número Hash Mensagem de confirmação Autor
1 2c6a45b (HEAD) Adicionando método público para acessar o método protegido Tom
2 ae45fab Atualizações na interface do banco de dados Contratante 1
3 77b9b82 Melhorando a interface do banco de dados Empreiteiro 2
4 3c9093c Ramificação de desenvolvimento mesclada em mestre Tom
5 b3d92c5 Adicionando novo módulo Event CMS Paul
6 7feddbb Adicionando classe CMS e arquivos Tom
7 a809379 Adicionando projeto ao Git Tom

Usando Rebase

Usando o log do git acima, queremos remover os seguintes commits; 2 & 3 (ae45fab & 77b9b82). Como são commits consecutivos, podemos usar rebase.

git rebase --onto <branch name>~<first commit number to remove> <branch name>~<first commit to be kept> <branch name>

por exemplo, para remover commits 2 & 3 acima

git rebase --onto repair~3 repair~1 repair

Usando o Cherry Pick

Etapa 1: Encontre o commit antes do commit você deseja remover git log

Etapa 2: verificar esse commit git checkout <commit hash>

Etapa 3 : Faça um novo branch usando seu commit de checkout atual git checkout -b <new branch>

Etapa 4: Agora você precisa adicionar o commit após o commit removido git cherry-pick <commit hash>

Passo 5: Agora repita o Passo 4 para todos os outros commits que deseja manter.

Passo 6: Uma vez que todos os commits foram adicionados ao seu novo branch e foi cometido. Verifique se tudo está no estado correto e funcionando conforme planejado. Verifique se tudo foi confirmado: git status

Etapa 7: Mude para o seu branch quebrado git checkout <broken branch>

Etapa 8: agora execute uma reinicialização a frio no branch quebrado para o commit antes daquele que você deseja remover git reset --hard <commit hash>

Etapa 9: mescle seu ramificação corrigida para esta ramificação git merge <branch name>

Etapa 10: Empurre as alterações mescladas de volta à origem. AVISO: isso substituirá o repositório remoto! git push --force origin <branch name>

Você pode fazer o processo sem criar um novo branch, substituindo a Etapa 2 & 3 pela Etapa 8, em seguida não realizar a Etapa 7 & 9.

Exemplo

Digamos que queremos remover os commits 2 & 4 do repo.

  1. git checkout b3d92c5 Verifique o último commit utilizável.
  2. git checkout -b repair Crie um novo branch para trabalhar.
  3. git cherry-pick 77b9b82 Execute o commit 3.
  4. git cherry-pick 2c6a45b Executar o commit 1.
  5. git checkout master Check-out mestre.
  6. git reset --hard b3d92c5 Redefina o master para o último commit utilizável.
  7. git merge repair Una nosso novo branch no master.
  8. git push --hard origin master Envie o mestre para o repositório remoto.

Nota final

Rebase Git & cherrypick são perigosos, mas poderosos soluções que devem ser usadas apenas como uma última opção e só ser realizada por alguém que sabe o que está fazendo. Esteja ciente de que ambas as soluções podem ter efeitos adversos em outros usuários que estão trabalhando no mesmo repositório / branch.

Finalmente, lembre-se de ter cuidado e boa sorte!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *