Uncategorized

Como desfazer um commit no Git

O Git é uma excelente ferramenta para controle de versões de arquivos. Dentro dele é possível desenvolver vários projetos em que pessoas diferentes possam contribuir de forma simultânea, modificando e acrescentando novos arquivos, sem o risco de terem suas alterações apagadas ou sobrescritas.

Controle de Status no Git

Para que isto aconteça de uma forma estruturada, cada arquivo tem um controle de status. Na figura abaixo, retirada do próprio site do Git, temos a visão completa deles. Se você já copiou ou iniciou o projeto o Git, agora pode fazer mudanças nos arquivos e enviar essas alterações para o repositório. É importante lembrar que os arquivos podem ter o status de traked ou untracked. Arquivos marcados como tracked são aqueles já dentro do repositório. Eles podem ser unmodified (que ainda não foram alterados), modified (que já sofreram alteração) ou staged (os que acabaram de ser alterados).

Ciclo de vida de um arquivo no Git

O que é o commit dentro do Git

Depois de sua alteração feita, é necessário fazer o commit da mesma para o projeto, ou seja, insere a mesma no histórico do projeto, para que fique disponível para outros integrantes da equipe. Ao fazer isto você insere uma descrição do que foi feito na alteração, para que ela não fique perdida e todos saibam que ela existe. Em resumo, isto seria o commit.

Como desfazer um commit

Algumas vezes você fez um commit de forma errada e precisa desfazer isto. Existem diversas formas, dependendo do que você exatamente quer mexer. Vamos apresentar algumas delas:

Alterar seu último commit

Talvez você tenha se esquecido de declarar algo na mensagem do commit e quer somente fazer uma pequena alteração. Para isto, você pode utilizar executar novamente o commit, acrescentando –amend:

Isto faz com que sua área de seleção seja utilizada no commit. Se você não fez nenhuma alteração, sua seleção será a mesma e você vai alterar somente a mensagem do commit que foi aberto no editor.  Isto sobrescreverá o último commit, alterando somente a mensagem.

Alterar seu último commit adicionando arquivos

Agora, se você quiser adicionar um novo arquivo, o código abaixo pode ser utilizado:

Isso vai sobrescrever o commit anterior pelo seu novo, com as alterações.

Alterar seu último commit da forma que você quiser

 Os exemplos anteriores mostravam casos específicos. Vamos agora mostrar uma solução mais completa.

A primeira linha é o que você quer desfazer. A segunda linha desfaz o commit, fazendo com que suas mudanças voltem ao status modified (vão aparecer como “Changes not staged for commit” no comando git status, e você vai precisar adicioná-los novamente antes de fazer outro commit).

A terceira linha representa as alterações que você vai fazer. A quarta linha representaria possíveis adições que você deseje. Na última linha, você faz o commit das alterações, reutilizando a mensagem do commit antiga. O reset  copiou o cabeçalho antigo para  .git/ORIG_HEAD; o comando  commit mais o  -c ORIG_HEAD  vai abrir o editor que continha a mensagem do commit original, permitindo sua edição.

Use a área de comentários abaixo para compartilhar outras dicas ou dúvidas sobre este assunto! Caso deseje navegar mais em outros assuntos, você, pode conferir nossa galeria de vídeos sobre Git. Abaixo está um exemplo:

 

Outra maneira interessante de descobrir mais coisas interessantes sobre Git é acessar nossa página de projetos

Avatar
About author

I, Dr. Michael J. Garbade is the co-founder of the Education Ecosystem (aka LiveEdu), ex-Amazon, GE, Rebate Networks, Y-combinator. Python, Django, and DevOps Engineer. Serial Entrepreneur. Experienced in raising venture funding. I speak English and German as mother tongues. I have a Masters in Business Administration and Physics, and a Ph.D. in Venture Capital Financing. Currently, I am the Project Lead on the community project -Nationalcoronalvirus Hotline I write subject matter expert technical and business articles in leading blogs like Opensource.com, Dzone.com, Cybrary, Businessinsider, Entrepreneur.com, TechinAsia, Coindesk, and Cointelegraph. I am a frequent speaker and panelist at tech and blockchain conferences around the globe. I serve as a start-up mentor at Axel Springer Accelerator, NY Edtech Accelerator, Seedstars, and Learnlaunch Accelerator. I love hackathons and often serve as a technical judge on hackathon panels.