Branching, merge e resolução de conflitos.
# Histórico completo
$ git log
# Histórico resumido (uma linha)
$ git log --oneline
def5678 Adiciona página de contato
abc1234 Estrutura inicial do site
# Histórico com gráfico visual
$ git log --oneline --graph
# Ver mudanças nao adicionadas
$ git diff
# Ver mudanças já preparadas (staged)
$ git diff --staged
# Comparar dois commits
$ git diff abc1234 def5678
main (ou master)
main: código estável e em produção
feature: nova funcionalidade em desenvolvimento
Quando a feature está pronta, juntamos (merge) com a main
# Listar todas as branches
$ git branch
* main
# Criar uma nova branch
$ git branch pagina-contato
# Criar e já mudar para ela
$ git checkout -b pagina-contato
# ou (mais moderno)
$ git switch -c pagina-contato
# Mudar para outra branch
$ git checkout main
# ou (mais moderno)
$ git switch main
# Deletar uma branch já mergeada
$ git branch -d pagina-contato
# Forçar delete (cuidado!)
$ git branch -D branch-abandonada
git switch ao invés de git checkout para
trocar branches. É mais claro e moderno.
# 1. Estar na main atualizada
$ git switch main
# 2. Criar branch para a nova feature
$ git switch -c pagina-contato
# 3. Trabalhar normalmente (editar arquivos)
# ... edita contato.html, style.css ...
# 4. Adicionar e commitar
$ git add .
$ git commit -m "Adiciona página de contato"
# 5. Mais alterações, mais commits
$ git add .
$ git commit -m "Adiciona formulário de contato"
# 6. Voltar para main e fazer o merge
$ git switch main
$ git merge pagina-contato
# 7. Deletar a branch (opcional)
$ git branch -d pagina-contato
Quando a main nao teve novos commits, o Git simplesmente "avança" o ponteiro. Nenhum commit extra é criado.
Quando ambas as branches têm novos commits, o Git cria um commit de merge (F) que junta os dois históricos.
<<<<<<< HEAD
<h1>Bem-vindo ao site</h1>
=======
<h1>Olá, visitante!</h1>
>>>>>>> feature
<<<, ===,
>>>)
git add e git commit
# Após resolver manualmente:
$ git add index.html
$ git commit -m "Resolve conflito no título"
# Descartar mudanças de
# um arquivo (nao commitadas)
$ git checkout -- index.html
# ou (mais moderno)
$ git restore index.html
# Remover do staging
# (manter a mudança)
$ git reset HEAD index.html
# ou (mais moderno)
$ git restore --staged index.html
# Corrigir a mensagem do
# último commit
$ git commit --amend
-m "Nova mensagem"
# Incluir arquivo esquecido
$ git add esquecido.css
$ git commit --amend --no-edit
git init)main com git branchpagina-sobre e mude para elasobre.html, adicione e faça commitmain e observe que sobre.html nao
existepagina-sobre na mainsobre.html agora aparece na mainGitHub: repositórios remotos, push, pull e pull requests.