Git Tutorial - soberaniadigital/soberaniadigital GitHub Wiki

Introdução ao Git

Esta é uma documentação introdutória sobre os comandos e conceitos básicos do Git, um sistema de controle de versão distribuído.

Cenários

1. Preparação: Obtendo o Projeto

Gerar um cópia local do repositório para começar a trabalhar.

  • Ferramenta: git clone
  • Exemplo de Uso:
    # 1. Clona o repositório remoto para uma pasta local.
    git clone [https://github.com/usuario/meu-projeto.git](https://github.com/usuario/meu-projeto.git)
    cd meu-projeto
  • Progressão: Este é o ponto de partida. Agora tem o código e todo o seu histórico.

2. Desenvolvimento: Criando a Funcionalidade

Você não deve trabalhar diretamente na branch main. Crie sua própria "ramificação" para a funcionalidade de login.

  • Ferramentas: git checkout -b, git add, git commit
  • Exemplo de Uso:
    # 1. Cria UMA NOVA branch chamada 'feature-login' e MUDA para ela.
    git checkout -b feature-login
    
    # 2. Agora cria os arquivos (ex: login.html, login.css)...
    
    # 3. Adiciona os novos arquivos à "área de preparo" (Staging).
    git diff
    git add <arquivo> (Colocar cada arquivo modificado)
    
    # 4. Salva um "snapshot" (um commit) do seu trabalho no histórico local.
    git commit -m "Adiciona estrutura inicial da página de login"
  • Progressão: Usou checkout -b para se isolar da main. Ela trabalhou e usou add e commit para salvar seu progresso localmente em sua branch.

3. Sincronização: Atualizando com a Equipe

Enquanto trabalhava, outro desenvolvedor atualizou a branch main com uma correção de bug. Você precisa trazer essa correção para sua branch antes de continuar.

  • Ferramentas: git checkout, git pull, git rebase (ou git merge)
  • Exemplo de Uso:
    # 1. Volta para a branch principal.
    git checkout main
    
    # 2. Baixa e mescla as atualizações do servidor (o commit de Bruno).
    git pull origin main
    
    # 3. Volta para sua branch de trabalho.
    git checkout feature-login
    
    # 4. Reaplica seus commits (o "login inicial") SOBRE a 'main' atualizada.
    # Isso mantém o histórico linear e limpo.
    git rebase main
    
    # (Alternativa: 'git merge main' faria a mesma coisa,
    # mas criando um "commit de merge" extra).
  • Progressão: Você usou pull para obter atualizações externas e rebase para colocar seu trabalho "em dia" com a branch principal, resolvendo possíveis conflitos antes de enviar seu código.

4. Compartilhamento: Enviando para Revisão

Você terminou a funcionalidade de login e quer que ela seja integrada ao projeto principal.

  • Ferramenta: git push
  • Exemplo de Uso:
    # Envia sua branch 'feature-login' para o repositório remoto (origin).
    git push origin feature-login
  • Progressão: O comando push torna sua branch local visível para outros no servidor. Agora ela pode abrir um Pull Request (como descrito no seu fluxo de trabalho no Bloco 1), pedindo para mesclar feature-login na main.

5. Recuperação (Cenário A): Desfazendo um Erro Local

Antes de dar push, Você percebe que seu último commit está completamente errado e quer apagá-lo (e às suas alterações).

  • Ferramenta: git reset
  • Exemplo de Uso:
    # 1. Você ainda está na 'feature-login' e não deu 'push'.
    
    # 2. Desfaz o último commit E descarta todas as alterações
    # nos arquivos que ele continha (cuidado: ação destrutiva).
    git reset --hard HEAD~1
  • Progressão: reset é usado para corrigir erros locais antes que eles sejam compartilhados com a equipe.

6. Recuperação (Cenário B): Desfazendo um Erro Público

A funcionalidade de login (commit 0a1b2c3d) foi mesclada na main, mas descobriu-se que você quebrou o layout. O histórico não pode ser reescrito (com reset) porque já é público.

  • Ferramenta: git revert
  • Exemplo de Uso:
    # 1. Garante que está na 'main' e atualizado.
    git checkout main
    git pull origin main
    
    # 2. CRIA UM NOVO COMMIT que é o oposto exato do commit que causou o bug.
    git revert 0a1b2c3d
    
    # 3. Envia o commit de reversão para o servidor, corrigindo o bug.
    git push origin main
  • Progressão: revert é a maneira segura de desfazer alterações em um histórico público, pois ele adiciona um novo commit (a reversão) em vez de apagar o commit antigo.

7. Limpeza: Removendo a Branch

O seu trabalho foi concluído e mesclado. A feature-login não é mais necessária.

  • Ferramenta: git branch -d
  • Exemplo de Uso:
    # 1. Volta para a 'main'.
    git checkout main
    
    # 2. Apaga a branch local 'feature-login'.
    git branch -d feature-login
  • Progressão: Este comando finaliza o ciclo de vida da feature, mantendo o repositório local limpo.

Referência de comandos

Funções Básicas do Git

Clonar repositório remoto

  • Comando: git clone URL
  • Descrição: Cria uma cópia local de um repositório remoto para começar a trabalhar.
  • Exemplo de uso: git clone https://github.com/usuario/meu-projeto.git

Adicionar arquivos à área de preparo (Staging Area)

  • Comando: git add .
  • Descrição: Inclui arquivos que sofreram alteração na área de staging para serem posteriormente commitados.
  • Exemplo de uso: git add . (Adiciona todos os arquivos modificados) ou git add index.html (Adiciona um arquivo específico).

Salvar alterações no repositório

  • Comando: git commit -m "mensagem"
  • Descrição: Confirma as alterações realizadas, registrando-as no histórico local com uma mensagem explicativa.
  • Exemplo de uso: git commit -m "Corrige bug na página de login"

Gerenciamento de Branches

Listar, criar ou remover branches

  • Comando: git branch <nome_da_branch> (para criar)
  • Descrição: Administra ramificações (branches) para organizar diferentes linhas de desenvolvimento.
  • Exemplo de uso: git branch feature-pagamento (Cria a nova branch) ou git branch -d feature-pagamento (Deleta a branch).

Mudar de branch ou criar nova branch

  • Comando: git checkout <nome_da_branch>
  • Descrição: Alterna entre branches existentes. Use git checkout -b <novo_nome> para criar e já alternar para uma nova branch.
  • Exemplo de uso: git checkout feature-pagamento (Muda para a branch) ou git checkout -b feature-nova (Cria e muda para a "feature-nova").

Integração, Compartilhamento e Sincronização

Unir alterações (merge)

  • Comando: git merge <branch>
  • Descrição: Combina o histórico de múltiplas branches (ex: traz as alterações da <branch> para a branch atual), criando um commit de merge.
  • Exemplo de uso: Estando na branch main, execute git merge feature-pagamento para trazer as mudanças da "feature-pagamento" para a "main".

Baixar e mesclar alterações de repositório remoto

  • Comando: git pull origin <branch>
  • Descrição: Sincroniza atualizações do repositório remoto (baixando-as) com o seu repositório local (mesclando-as).
  • Exemplo de uso: git pull origin main (Atualiza sua branch "main" local com a versão do servidor remoto "origin").

Subir commits locais para o remoto

  • Comando: git push origin <branch>
  • Descrição: Envia as alterações (commits) locais para atualizar o repositório remoto.
  • Exemplo de uso: git push origin feature-pagamento (Envia sua "feature-pagamento" local para o repositório remoto).

Recuperação e Desfazer Operações

Desfazer alterações commitadas

  • Comando: git reset <commit_hash>
  • Descrição: Reverte o histórico para um commit anterior, desfazendo modificações posteriores (cuidado ao usar --hard).
  • Exemplo de uso: git reset --hard HEAD~1 (Remove permanentemente o último commit e suas alterações do seu repositório local).

Desfazer um commit específico

  • Comando: git revert <commit_hash>
  • Descrição: Cria um novo commit que reverte as alterações do commit escolhido, mantendo o restante do histórico intacto.
  • Exemplo de uso: git revert 0a1b2c3d (Cria um novo commit que desfaz o que foi feito no commit "0a1b2c3d").

Merge vs Rebase

git merge

Combina ramificações mantendo o histórico original. Ele cria commits de merge explícitos para unir as linhas de desenvolvimento. O histórico pode ficar mais complexo visualmente, mas preserva o contexto exato de quando as ramificações foram unidas.

  • Exemplo de cenário: Você está na main e quer integrar o trabalho da feature-login. Você usa git merge feature-login. Isso cria um novo "commit de merge" (ex: "Merge branch 'feature-login' into 'main'"), unindo os históricos.

git rebase

Reaplica os commits de uma branch sobre outra. Ele "move" a branch para o topo da branch base, criando um histórico linear e mais limpo. Este processo reescreve o histórico (altera os hashes dos commits), por isso deve ser usado com cautela em branches compartilhados.

  • Exemplo de cenário: Você está na feature-login e a main foi atualizada por outros desenvolvedores. Você usa git rebase main (enquanto está na "feature-login"). O Git "move" seus commits da "feature-login" para o topo da main atualizada, deixando o histórico linear, como se você tivesse começado seu trabalho a partir da main mais recente.

Slides com apresentação simples do conteúdo

Git-Slides.pdf

⚠️ **GitHub.com Fallback** ⚠️