Git: Manual de sobrevivência do iniciante

3 minute read

O Git é um sistema de controle de versão distribuído, criado por Linus Torvalds, nada mais nada menos que o criador do linux. Um software que tem por objetivo gerenciar diferentes versões no desenvolvimento de um documento qualquer, comumente utilizado no desenvolvimento de software para controlar diferentes versões dos códigos fonte e de sua documentação.

Diferente das outras opções de sistemas similares como o CSV e SVN, a arquitetura do git é descentralizada, ou seja, não existe um repositório oficial, apesar de existir esta possibilidade, então em cada repositório incluindo o da maquina do contribuidor, existira uma cópia completa e funcional, permitindo a utilização das operações do Git sem a necessidade de estar online.

Quando se trata de trabalho em equipe, e a maior parte do tempo as equipes estarão trabalhando em paralelo, um sistema como o Git se torna mais do que essêncial, para que não hajam conflitos entre as alterações realizadas por cada colaborador.

Também é comum que no constante desenvolvimento dos projetos hajam alterações que comprometam o seu funcionamento, neste caso o Git permite que essas alterações sejam revertidas de maneira rápida e simples.

Como isso funciona?

O Git trabalha em uma estrutura de ramificações, onde cada alteração de código cria um novo ponto na ramificação atual, essas ramificações, mais conhecidas como branchs são criadas no desenvolvimento de novas funcionalidades, e baseadas em branchs já existentes.

Cada contribuidor faz uma cópia local do repositório remoto original e cria as modificações necessárias, essa cópia será enviada novamente para o repositório remoto.

Passos no fluxo de contribuição de um projeto utilizando Git:

  1. Clonar o repositório para que uma cópia contendo todos os arquivos originais esteja disponível localmente.
git clone <HTTPS ou SSH>
  1. Criar uma branch, onde podemos alterar os arquivos do projeto sem interferir nos arquivos originais
git branch <nome da ramificação (branch)>
# Alterar para a ramificação criada
git checkout <nome da ramificação (branch)>
  1. Conforme vamos criando e modificando os arquivos, adicionamos essas modificações
git add -p
  1. E as dividimos em commits, é importante que a descrição do commit seja objetiva e clara quanto ao motivo das alterações, remoções ou inclusões, porque ela ficará salva no histórico das alterações.
git commit

Caso seja necessário realizar alguma alteração posterior ao primeiro commit já realizado, é possível adicionar as novas alterações e utilizar o comando:

git commit --amend
  1. Uma vez que todas alterações forem finalizadas, vamos enviar a nossa branch contendo todas as alterações de volta para o repositório remoto, para que ela fique disponível para os demais contribuidores do projeto poderem ver e alterar.
git push --set-upstream origin <nome da ramificação (branch)>

Caso você tenha adicionado alterações posteriores, basta utilizar o seguinte comando:

git push --force with lease
  1. Então é aberto um Pull Request, onde você pede ao dono do repositório que suas contribuições sejam incluídas nele.

  2. Geralmente após a revisão das modificações ser realizada por algum dos outros contribuidores, você pode dar o merge que atualizara o repositório original com as suas modificações.

Comandos mais utilizados

Iniciando um repositório

git init

Buscar e aplicar modificações do repositório remoto no repositório local

git pull --prune

A flag --prune deleta branchs locais cujas modificações já foram aplicadas na branch original. Algumas vezes essas modificações podem gerar conflitos que necessitam de interação humana para serem corrigidos.

Resetando um commit

git reset --soft HEAD~1

A flag --soft garante que as alterações desfeitas sejam preservadas. Após executar o comando, você encontrará as mudanças como modificações locais não confirmadas em sua cópia local.

Se você não quiser manter essas alterações, simplesmente use a flag --hard. Faça isso apenas quando tiver certeza de que não precisa mais dessas alterações.

git reset --hard HEAD~1

Removendo um arquivo da área de staging ou desfazendo um git add

git reset <nome do arquivo>

Rebase

As modificações que você está fazendo em sua branch local podem ficar defasadas em relação ao repositório remoto, então é possível alterar a base de sua ramificação local para a mais atual com o comando rebase.

git rebase origin/<main branch>

Histórico de commits:

git log --graph --all --decorate --oneline
  • log: Mostra o histórico de commits.
  • --all: Apresenta todas referências.
  • --graph: Cria uma representação gráfica do histórico de commits.
  • --decorate: Traz o nome da referência para cada commit mostrado.
  • --oneline: Esta é uma abreviação para --pretty=oneline --abbrev-commi.

Deletar branchs locais cujas modificações já foram aplicadas ao repositório remoto “master”

git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d
  • branch: Listar, criar ou deletar ramificações.
  • --merged: Ramificações as quais suas modificações já foram aplicadas ao repositório original.
  • |: Sequência de um ou mais comandos.
  • egrep: Mostrar linhas que correspondem a um padrão.
  • -d, --delete: Deletar ramificação.

Arquivar modificações

git stash

Mostrar diferenças entre as modificações armazenadas e a ramificação atual

git stash show -p
  • stash: Arquivar as alterações.
  • show: Mostrar as alterações arquivadas e suas diferenças em relação a ramificação original.
  • -p, --patch: Seleciona as diferenças entre o ponteiro HEAD e a branch atual.

Alterando o nome de uma branch local

git branch -m <old-name> <new-name>

Atualizar repositório local com o remoto incluindo tags

git pull --prune && git fetch --tags --all --force && git branch --merged | egrep -v "(^\*|main)" | xargs --no-run-if-empty git branch --delete

Removendo arquivos não rastreados

git clean -f -d # remove untracked

O que é GitHub

Enquanto o Git é um sistema de versionamento, o GitHub é uma plataforma para criação de repositórios remotos Git, possibilitando que outras pessoas possam clonar esse repositório localmente, realizar alterações e enviar essas alterações de volta ao repositório remoto.

Alternativas

  • GitLab
  • BitBucket

Referências

Comments