Facilitando o dia a dia com o Git

Vitor Hugo R Merencio
Fretebras Tech
Published in
4 min readNov 28, 2023
Photo by Yancy Min on Unsplash

O Git assim como toda ferramenta que existe a muitos anos tem diversas funcionalidades e macetes, que foram sendo descobertos ou recomendados com o passar dos anos, aqui vou listar alguns que me ajudaram e ajudam até hoje quando estou trabalhando em um projeto compartilhado entre várias pessoas sem muita dificuldades.

Alternativa ao git rebase

O git rebase é um dos comandos essenciais quando se está trabalhando em um projeto com diversos times ou pessoas, com a finalidade de garantir um histórico de commits mais consistente e fácil de entender, ele se torna indispensável para garantir que a branch em que esteja trabalhando está com o histórico atualizado da branch alvo durante um merge/pull request.

Contudo quando se está trabalhando a muito tempo em uma branch e ela começa a criar muitos conflitos durante a execução de um git rebase ele acaba se tornando um processo maçante e bastante lento, visando ganhar velocidade no processo de realizar o rebase da branch, abaixo temos uma sequência que visa realizar o mesmo processo feito pelo git rebase mas agora totalmente controlado por você:

git checkout <branch-alvo>
git reset --hard origin/<branch-alvo>
git pull origin <branch-alvo>
git checkout -b <nome-da-branch-nova>
git checkout <branch-antiga>

git log # Pegar os hashes de commits feitos por você nesta branch
git checkout <nome-da-branch-nova>

# executar isso para todos os commits do antigo para o mais novo
git cherry-pick --keep-redundant-commits <hash-commit>

# Faça alguns testes antes de excluir a branch antiga, para ver se não quebrou nada
git branch -D <branch-antiga>

git checkout <nome-da-branch-nova>

git branch -M <branch-antiga> # Isso é para vc não precisar abrir um MR novo
git push --force -u # Isso força a atualização do branch remoto

Essa estratégia acima utiliza o git cherry-pick como a ferramenta que vai transferir os commits de uma branch para outra de forma manual, onde conseguimos reproduzir o cenário que ocorreria em um git rebase.

Visualizar melhor o log dos commits

Quando estamos tentando identificar o que trabalhamos ou foi trabalhado em uma branch, precisamos utilizar o git log para que possamos localizar os commits relacionados a branch. Abaixo temos um exemplo de como o log fica nesse cenário:

O que conseguimos perceber nesse caso é que fica difícil de identificar as relações entre os commits e qual a branch que eles fazem parte. Abaixo eu mostro um novo comando que vai permitir que vocês analisem de forma mais rápida os commits:

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

Com esse comando acima vamos ter uma nova visualização dos commits que vai nos permitir validar de uma forma mais prática, veja abaixo como fica os logs com o uso desse comando:

Resetar com segurança

Quando trabalhamos localmente as vezes precisamos testar ou validar diversos casos, o que acaba gerando diversos arquivos ou alterações que não queremos enviar para o remote do git ou não temos mais necessidades.

Com estes casos em mente precisamos de apenas 2 pequenos comandos, que garantam que essas informações sejam excluídas dos arquivos estão sendo trabalhados no momento e o cache que o git faz de todos os arquivos se são criados (sim o git faz cache até do que você não faz commit), os dois comandos são:

git reset --hard
git clean -df

Procurando mais ideias…

Nesta publicação compilei os comandos que mais utilizo no meu dia a dia, principalmente em situações em que preciso de praticidade ou preciso otimizar o tempo gasto nestes casos, contudo o uso delas não são um copia e cola de algum arquivo em minha máquina, estes comandos combinados com um arquivo para salvar e configurar os atalhos para acessar mais facilmente estes comandos.

No meu Github tenho um repositório em que possuo estes vários comandos e seus respectivos atalhos, em que uso no dia a dia para facilitar o meu trabalho não somente com o Git, mas também com o Docker, o Artisan do Laravel, entre outras ferramentas como ele é agnóstico ao ecossistema UNIX (MacOS ou Linux) pode ser instalado e utilizado em diversos sistemas operacionais e ferramentas shell de sua preferência.

--

--