Facilitando o dia a dia com o Git
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.