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

Highest Stable Coin Yields – (W16 – 2024)

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

2 weeks ago

LEDU Token OTC Trading

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

1 month ago

Highest Stable Coin Yields – (W12 – 2024)

It’s another week and like always we have to explore the top yield platforms for…

1 month ago

Binance Auto Invest – the Best Innovation in Crypto since Sliced Bread

At a time where we’re constantly seeking tools and strategies to simplify our crypto investments,…

1 month ago

Highest Stable Coin Yields – March 2024

As we kick off another week, it's time to explore the top yield platforms for…

2 months ago

Education Ecosystem Featured on Business Insider

We're excited to share that Education Ecosystem was recently featured in an article on Business…

2 months ago