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:

$ git commit --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:

$ git commit -m 'commit original'
$ git add arquivo que você esqueceu
$ git commit --amend

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.

$ git commit -m "algo que deu muito errado"                 
$ git reset HEAD~                                                                                     
<< edite os arquivos necessários >>                                                
$ git add ...                                                                                  
$ git commit -c ORIG_HEAD

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

Dr. Michael J. Garbade

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.

Recent Posts

Blockchain in Elections: A Leap Toward Transparent Democracy

In 2024 we're witnessing a critical point in democratic technology: the integration of blockchain and…

3 weeks ago

Win Big with Our Amazon Fire Max 11 & AirPods Pro Giveaway!

We’re thrilled to announce an exciting opportunity for you to win not one but two…

2 months ago

Unleashing Potential: How Education Ecosystem Transforms Learning into Real-World Success

Acquiring practical skills is crucial for career advancement and personal growth. Education Ecosystem stands out…

4 months ago

The Role of Artificial Intelligence in Modern Software Development

Artificial Intelligence (AI) has been making significant strides in various industries, and the software development…

7 months ago

Highest Stable Coin Yields – (W16 – 2024)

Another week to bring you the top yield platforms for three of the most prominent…

8 months ago

LEDU Token OTC Trading

If you hold a large volume of LEDU tokens above 1 million units and wish…

9 months ago