Como arrumar a história dos seus commit no Git

Estamos publicando uma tradução do artigo que encontramos no hackernoon.com. Seu autor, Thiago Miranda, escreve sobre como tornar o trabalho com o Git mais conveniente e eficiente.



Sobre alguns comandos extremamente úteis no Git


Durante o último mês, venho fazendo programação em pares e criei várias centenas de commits no Git. No artigo, compartilharei o mais importante do que aprendi durante esse período: falarei sobre como trabalhar com o histórico de commits, sobre técnicas bem-sucedidas e como implementá-las usando uma dúzia de equipes.

1. Qual é a história do Git?




Um registro preciso de todas as confirmações que contêm alterações feitas nos arquivos. Nele, é possível rastrear alterações específicas e a hora em que foram feitas, ou comparar a versão atual com a anterior. Onde ver a história? Digite o comando através do Git Bash:

git log --oneline

Se você tiver muitos commits, poderá alternar de um comentário para outro usando as teclas de seta ou as teclas Page Up / Page Down - como em qualquer outro arquivo. Para sair, pressione a tecla de atalho (q).

2. Sobre comentários sobre confirmações


Não escreva comentários sem sentido, eles devem ser concisos e não exigir explicações. A tarefa deles é indicar quais alterações você fez no código e o que elas afetam.

  • Como não fazer: "Fixed index.html"
  • Como: "Melhorou a velocidade da barra de navegação"

Vamos ver o que é isso.
Imagine que você está trabalhando em um projeto de larga escala que a maioria dos especialistas empregados nem mesmo conhece. Você desenvolve um novo recurso, o testa em seu equipamento e tudo funciona bem.

Mas, após um empurrão, tudo de repente deixa de funcionar, e a primeira coisa que você verifica são as alterações feitas durante o desenvolvimento desse recurso. No log do Git, você encontra muitos commits com comentários no estilo "fixo". Imagine quanto tempo você gasta para encontrar o caminho certo!

3. Sempre faça confirmações


Confirma, confirma e novamente confirma. Concluída a função - adicione uma confirmação, aprimore o estilo de um elemento de bloco - adicione uma confirmação e assim por diante. Idealmente, você deve enviar uma confirmação a cada alteração.

Talvez você esteja pensando: por que existem tantos commits? O principal motivo é que sua nova funcionalidade pode entrar em conflito com o código de outra pessoa, mas se você sempre cometer pequenas alterações, será mais fácil encontrá-las e corrigi-las. Isso economiza seu tempo rastreando dezenas ou centenas de linhas modificadas no mesmo commit.

4. Corrija o último comentário no commit


E se, depois de adicionar uma pequena confirmação ao seu repositório local, você desejar corrigir o erro de digitação ou fazer um comentário sobre a confirmação com mais detalhes? Fazer alterações é bastante simples com o comando:

git commit -m “correct message” --amend

Atenção: se você já começou a se comprometer com um repositório remoto, é melhor não usar este comando.

Consulte a documentação oficial para obter detalhes .

5. Combine o último X confirma em um


Situação: enviando uma confirmação para um novo recurso, você entende que precisa de mais uma pequena alteração, faça alterações mínimas e confirme novamente ... Como resultado, cinco confirmações são sobre a mesma coisa. Aconteceu? Tais confirmações são eliminadas da visão geral da sua história no Git, mas se você quiser, elas podem ser facilmente corrigidas usando o comando:

git reset HEAD~3

O comando HEAD ~ 3 recupera três confirmações superiores, incluindo a mais recente. Neste exemplo, seus últimos três commits serão excluídos do log, mas as alterações no código permanecerão em vigor. Agora é hora de ver qual código você precisa confirmar, para isso, inserimos o comando:

git stage --diff

Você verá que todas as alterações feitas nas confirmações removidas do histórico agora estão indexadas, para que você possa confirmá-las novamente, desta vez de uma só vez.

Observe que HEAD geralmente se refere ao último commit adicionado. Se você não tiver certeza, verifique o log do Git. Se sua última confirmação foi congelada (não é o caso mais comum), o comando HEAD ~ 1 apagará todas as confirmações da ramificação congelada. Para saber mais, consulte a documentação.

6. Exclua a última confirmação com alterações


Tenha cuidado, pois esse método apagará todas as alterações sem a capacidade de reverter. Geralmente é usado após a experimentação do código, se o resultado não atender às expectativas. Eu recomendo que você tente primeiro no repositório de sandbox.

git reset –-hard HEAD~1

Agora seu último commit foi excluído, bem como todas as alterações relevantes no código.

7. Limpe seu histórico de consolidação


A maneira mais eficiente de limpar o histórico de consolidação é usar o comando rebase. Cuidado: você pode excluir uma confirmação pressionando acidentalmente a tecla errada. Então, vamos executar o rebase interativamente (-i flag) com o comando:

git rebase -i HEAD~5



Assim que você entrar, você verá uma lista dos últimos 5 commits (HEAD ~ 5) dentro do terminal. Todas as confirmações são classificadas por data, ou seja, a mais recente estará no topo (esta lista é aberta usando o Vim, o editor de texto Git padrão que permite editar arquivos de texto dentro do terminal). E aqui está uma breve instrução com vários comandos úteis. Na maioria dos casos, você precisará dos comandos squash e reword.

Substituir o comando pick pelo comando squash removerá essa confirmação do log e todas as alterações no código serão agrupadas com a última confirmação destacada pelo comando pick.

Se você desejar ajustar o comentário, poderá substituir o comando pick pelo comando reword e reescrever o comentário.

Agora você pode ir para a próxima janela, onde precisa escrever um comentário para o grupo de confirmações que você vai colar usando squash. Para continuar, pressione ESC e digite:

:wq!

Dois pontos são (:)necessários para indicar que você deseja transferir o comando, (w)gravar (salvar) as alterações, (q)sair e (!)executar o comando.

Observe que cada grupo de confirmação receberá seu comentário. O resultado pode ser verificado no log do Git.

Se, por algum motivo, você sair desta janela sem concluir a operação, poderá retornar a qualquer momento com o comando:

git rebase --edit

Se você quiser sair da janela sem salvar as alterações, pressione a tecla ESC e digite:

:q!

O Vim receberá um comando para fechar o arquivo sem salvar.

8. Gerenciar indexação


Normalmente, você deve enviar confirmações para um único arquivo ou para um grupo de arquivos relacionados. Mas então como fazer alterações rapidamente durante a indexação?

Digamos que você tenha 3 arquivos e apenas 2 deles precisam ser confirmados. Nesse caso, você pode tentar o seguinte comando:

git add .

Agora exclua o arquivo que você não precisa da indexação:

git reset -- Readme.txt

E verifique o resultado:

git status

Adicione todos os arquivos de alguma extensão, por exemplo CSS:

git add *.css

Adicionado tudo por engano? Em seguida, limpe o índice usando o comando:

git reset --

Se você precisar de operações mais complexas, poderá adicionar arquivos ao índice usando o modo de diálogo:

git add -i

Primeiro, selecione uma opção digitando o número apropriado, por exemplo (3), para reverter suas ações.

Ao selecionar uma opção, você pode inserir uma lista de arquivos que deseja remover da indexação, um após o outro.

Quando terminar, pressione (Enter).

Os arquivos são adicionados da mesma maneira. Usando a opção (4), adicione um arquivo não rastreado.

Para sair, entre no (q)menu de opções.

9. Conclusão


A principal coisa a fazer antes de enviar para um repositório remoto, e especialmente antes de mesclar sua filial, é garantir que você arrume o histórico de consolidação. Depois de colocar tudo em um repositório remoto, nada pode ser corrigido.

Deseja saber mais sobre a programação de pares e começar remotamente? Confira Microverse.org .

All Articles