Git: comandos essenciais para desenvolvedores

Rocketseat

Navegação Rápida:
Benefícios do Git
1Configuração inicial com
2Ciclo de versionamento: do
3Branches: criação, navegação e merge
4Colaboração remota:
5Reversão de mudanças:
6Resolução de conflitos de merge: passo a passo
7Dicas extras:
8Boas práticas de versionamento com Git
9Tabela rápida: resumo dos comandos Git
10Conclusão
11
O controle de versão com Git se tornou parte fundamental do cotidiano de desenvolvedores, e em 2025 isso é mais verdade do que nunca. Seja você iniciante no Git ou um dev experiente, dominar os comandos Git é essencial para colaborar em projetos de código de forma segura e eficiente. O Git, criado por Linus Torvalds em 2005, revolucionou a maneira como equipes desenvolvem software, tornando o versionamento distribuído um padrão da indústria. Hoje, ao completar 20 anos de existência, o Git continua evoluindo e se mantendo relevante, com novos recursos e boas práticas modernas adaptadas aos times atuais. Neste tutorial, vamos explorar do básico (como iniciar um repositório e salvar alterações) até técnicas de colaboração eficaz (como branches, pull requests e resolução de conflitos), tudo em linguagem acessível. Você terá em mãos um documento repleto de exemplos práticos e dicas valiosas, pronto para usar no dia a dia do desenvolvimento.
Preparado para dar um boost seu conhecimento em Git? Então vamos lá!
Benefícios do Git
Antes de mergulharmos nos comandos, vale entender por que o Git é tão valorizado pelos desenvolvedores e empresas. Alguns dos principais benefícios do Git incluem:
- Histórico completo e rastreabilidade: o Git registra cada alteração no código, permitindo que você volte a qualquer versão anterior quando preciso. Isso significa que é possível rastrear quem alterou o quê e quando, facilitando identificar a origem de bugs ou revertendo mudanças problemáticas.
- Segurança e integridade: o sistema de versionamento do Git foi construído com foco na segurança do histórico. Cada commit é identificado por um hash criptográfico (SHA-1), garantindo que o histórico de mudanças não seja adulterado sem detecção. Em outras palavras, você pode confiar que o código e seu histórico estão íntegros e protegidos contra alterações inesperadas.
- Colaboração eficiente: com o Git, múltiplos desenvolvedores podem trabalhar em paralelo no mesmo projeto sem pisar no código um do outro. Por meio de branches e merges, cada um desenvolve suas funcionalidades isoladamente e depois integra as contribuições ao projeto principal. O Git facilita a colaboração em equipe, evitando conflitos e consolidando as contribuições de forma organizada.
- Padrão do mercado: Git não é apenas mais uma ferramenta – é o padrão de fato em controle de versão hoje. Plataformas como GitHub, GitLab e Bitbucket adotaram o Git, e praticamente qualquer projeto profissional ou open source utiliza Git para versionamento de código. Ou seja, dominar o Git é praticamente obrigatório para desenvolvedores que querem atuar no mercado atual.
Além desses pontos, vale mencionar que o Git é rápido, gratuito e distribuído (você tem uma cópia completa do repositório localmente), o que traz flexibilidade para trabalhar mesmo sem conexão com a internet. Com esses benefícios em mente, vamos configurar o Git e colocar a mão na massa!
Configuração inicial com git config
Antes de começar a versionar código, é importante fazer uma configuração inicial do Git para associar suas informações de identificação aos commits. Isso garante que as mudanças enviadas tenham um autor reconhecido. Os comandos mais importantes nessa etapa são:
# Configurar o nome de usuário git config --global user.name "Seu Nome" # Configurar o e-mail do usuário git config --global user.email "seu-email@exemplo.com" # Verificar configurações (opcional) git config --list
Use o parâmetro
--global
para que essas configurações se apliquem a todos os seus repositórios (normalmente, você faz isso uma vez só). O nome e e-mail fornecidos serão anexados a cada commit que você criar, servindo como assinatura digital das suas contribuições. Certifique-se de usar o mesmo e-mail associado ao seu GitHub ou outra plataforma de git, pois isso permite que seus commits sejam vinculados à sua conta. Outra configuração recomendada é definir o nome padrão da branch principal como
main
(historicamente chamada de master
). Versões recentes do Git já utilizam main
por padrão, mas não custa garantir:# Define 'main' como branch padrão ao iniciar um novo repositório git config --global init.defaultBranch main
Com essas configurações iniciais prontas, você já pode começar a usar o Git nos seus projetos. Vamos agora ver o ciclo básico de versionamento, do git init ao git log.
Ciclo de versionamento: do git init
ao git log
Vamos agora passar pelo fluxo básico de versionamento de código com Git, passo a passo. Esse ciclo se repete constantemente no dia a dia do desenvolvimento:
git init
: inicia um novo repositório Git. Execute esse comando dentro da pasta do seu projeto para transformá-la em um repositório Git (será criada uma pasta oculta .git/
com todo o histórico). Por exemplo:git init
Após isso, seu projeto passa a ser versionado pelo Git.
Criar/editar arquivos: depois de iniciar o repositório, crie ou modifique arquivos no projeto. Por exemplo, crie um arquivo
index.html
ou edite arquivos existentes. Inicialmente, esses arquivos modificados estão apenas na sua cópia de trabalho (working directory) e o Git ainda não os rastreia. git status
: verifica o estado do repositório após alterações. Este comando lista quais arquivos estão modificados, novos (não rastreados) ou prontos para serem commitados. É um comando de consulta, que você deve usar com frequência para se orientar. Por exemplo, logo após criar ou modificar um arquivo, git status
vai listá-lo como untracked (não rastreado) ou modified (modificado), indicando que há mudanças não versionadas ainda. git add
: adiciona mudanças à staging area (área de preparo) para serem commitadas. Você pode adicionar um arquivo específico (git add arquivo.txt
) ou adicionar todos de uma vez (git add .
). Esse passo permite selecionar quais mudanças irão compor o próximo commit. Exemplo:git add index.html
Depois de adicionar, o arquivo
index.html
sai do estado modified/untracked e passa para staged, pronto para o commit. git commit
: grava as mudanças adicionadas em um novo commit (uma espécie de “foto” do estado do projeto). Cada commit representa um ponto no histórico do projeto. Ao executar git commit
, use a opção -m "mensagem"
para incluir uma mensagem resumindo a alteração. Por exemplo:git commit -m "Adicionar página inicial"
Isso criará um commit contendo as mudanças preparadas e uma mensagem explicativa. Após o commit, a staging area fica vazia novamente (as mudanças foram salvas no histórico) e o repositório local avança no histórico com esse novo snapshot do projeto.
git log
: exibe o histórico de commits do repositório. Com esse comando, você pode ver a sequência de commits (os mais recentes geralmente no topo), com seus identificadores (hashes), autor, data e mensagem. É útil para revisitar o histórico ou confirmar se seus commits foram registrados corretamente. Uma variação útil é git log --oneline
para ver cada commit em uma linha resumida. No fluxo acima, cobrimos o ciclo completo: inicializamos um repositório, fizemos alterações, adicionamos essas alterações e criamos um commit com uma mensagem. Esse ciclo se repete sempre que você faz novas mudanças no código. Lembre-se de verificar o
git status
frequentemente e escrever mensagens de commit claras que descrevam o que foi feito (falaremos mais sobre boas práticas de commits adiante). Agora que você já sabe criar um histórico local, vamos explorar como o Git lida com ramificações utilizando branches.Branches: criação, navegação e merge
Um dos recursos mais poderosos do Git é a capacidade de trabalhar com branches (ramificações). Branches permitem desenvolver funcionalidades ou corrigir bugs isoladamente, sem interferir no código principal, e depois unir as mudanças. Em 2025, usar branches faz parte do fluxo de trabalho padrão em praticamente todos os projetos.
Criando uma nova branch: Para criar uma branch, use
git branch <nome_da_branch>
. Por exemplo:git branch minha-feature
Isso cria uma nova ramificação chamada
minha-feature
, que inicialmente é uma cópia do estado atual da branch em que você está (por exemplo, da main
). Note que apenas criamos, mas não mudamos para ela ainda. Uma maneira prática de criar e já mudar para a nova branch em um só comando é:git checkout -b minha-feature
O comando acima cria a branch
minha-feature
e já faz o checkout dela automaticamente. Em versões recentes do Git, você pode usar git switch -c minha-feature
para o mesmo efeito (o Git introduziu o comando switch
para tornar a sintaxe mais clara ao trocar de branch).
Listando branches existentes: Basta rodar git branch
sem argumentos para ver todas as branches no repositório e qual está ativa no momento (marcada com um *). Isso ajuda a se situar no projeto, especialmente quando há várias ramificações. Trocando de branch (navegação): para mudar para outra branch existente, use
git checkout <nome>
ou, de forma equivalente nas versões atuais, git switch <nome_da_branch>
. Por exemplo:git switch minha-feature
Agora qualquer commit que você fizer será na branch
minha-feature
. Importante: o comando tradicional git checkout
ainda funciona e é muito utilizado em tutoriais e documentação, mas o git switch
foi introduzido para deixar claro que estamos apenas trocando de contexto (sem alterar arquivos específicos). Ambos fazem a mesma coisa ao mudar de branch.Mesclando branches (merge): depois de trabalhar em uma branch separada, chega a hora de integrar as mudanças de volta à branch principal (por exemplo, a
main
). Para isso, usamos o git merge
. O fluxo comum é:Primeiro, certifique-se de estar na branch de destino (por exemplo,
main
):git checkout main
Em seguida, execute o merge da branch de funcionalidade na branch atual. Por exemplo, para mesclar
minha-feature
na main
:git merge minha-feature
Ao rodar o merge, o Git tentará juntar as alterações da branch feature na branch atual. Se não houver conflitos, podem ocorrer duas situações:
- Se a
main
não teve novos commits desde que aminha-feature
foi criada, o Git simplesmente moverá o ponteiro damain
(fast-forward), incorporando todos os commits da feature.
- Se houver commits na
main
no meio do caminho, o Git criará um commit de merge, combinando o histórico das duas branches.
Após o merge, as mudanças da
minha-feature
farão parte da main
. É recomendável então excluir a branch que já foi integrada, para manter o repositório organizado:git branch -d minha-feature
(Dica: o
-d
de delete só apagará a branch se ela já estiver mesclada; caso contrário, use -D
para forçar, mas cuidado ao forçar a exclusão de branch não mesclada.)Mesclar branches é um processo normalmente tranquilo quando todos atualizam seu código com frequência. Entretanto, em casos onde duas branches modificam o mesmo trecho de código, podem surgir conflitos. Veremos adiante como resolver conflitos Git de merge passo a passo. Antes disso, vamos entender como compartilhar seu código com outros desenvolvedores usando repositórios remotos.
Colaboração remota: git remote
, git push
, git pull
, git fetch
e pull requests
Trabalhar sozinho em um repositório local é útil, mas o verdadeiro poder do Git aparece quando colaboramos remotamente via plataformas como GitHub ou GitLab. Um repositório remoto é uma copia do seu projeto hospedada na nuvem, permitindo que você e outros devs sincronizem mudanças. Vamos ver os comandos chave para colaboração remota.
Clonando um repositório existente: se o projeto já possui um repositório remoto (por exemplo, no GitHub), o jeito mais fácil de obter uma copia é usando
git clone
. Por exemplo:git clone https://github.com/usuario/nome-do-repo.git
Esse comando baixa todos os arquivos e todo o histórico do repositório para sua máquina, criando uma pasta
nome-do-repo
. Além disso, o Git já configura automaticamente o apelido origin
apontando para o repositório remoto. A partir daí, você já tem um repositório Git funcional conectado ao remoto. Adicionando um remoto a um repositório local: caso você tenha iniciado um repositório local do zero (com
git init
) e depois criado um repositório remoto vazio (no GitHub, por exemplo), será preciso conectar os dois. Isso é feito com git remote add
. Por convenção, chama-se o remoto principal de origin
:git remote add origin https://github.com/usuario/meu-projeto.git
Agora seu repositório local sabe a URL do remoto chamado
origin
. Você pode verificar os remotos configurados com git remote -v
. Enviando commits para o servidor (
git push
): o comando git push
envia seus commits locais para o repositório remoto. Supondo que você esteja na branch main
e queira enviá-la para o origin
, faça:git push -u origin main
A primeira vez usamos
-u
(abreviação de --set-upstream
) para salvar a relação entre a branch local e a remota, de modo que nas próximas vezes basta git push
. Após esse comando, seus commits estarão no GitHub (ou outro servidor) e qualquer colaborador com acesso poderá obtê-los. Atualizando seu repositório local (
git pull
): para trazer as alterações do remoto para sua máquina, usamos git pull
. Esse comando combina dois passos em um: primeiro ele faz um fetch (baixa os novos commits do servidor) e em seguida faz um merge automático desses commits na branch atual. Por exemplo, para atualizar a branch main
com o que há no remoto:git pull origin main
Depois de executar, seu repositório local ficará sincronizado com o remoto. É uma boa prática rodar um pull com frequência (por exemplo, ao começar o dia de trabalho) para ter o código atualizado e reduzir chances de conflito. Obs.: Se você tiver commits locais que o remoto ainda não tem, o
git pull
tentará mesclar as mudanças; caso encontre conflitos, será necessário resolvê-los manualmente.Buscando alterações sem mesclar (
git fetch
): em algumas situações, você pode querer apenas ver as novas mudanças do remoto sem integrá-las imediatamente. O git fetch
faz exatamente isso: baixa as referências de commits e branches do servidor, atualizando seu repositório local oculto (refs remotas), mas não mexe nos seus arquivos nem na sua branch atual. Após um fetch, você pode usar git log
ou git diff
para inspecionar as novidades e então decidir mesclar (por exemplo, fazendo um git merge
manual ou utilizando git pull
depois). Resumindo: git fetch
traz as novidades e deixa você decidir o que fazer, enquanto git pull
já traz e aplica as novidades.Pull Requests (PRs): no dia a dia da colaboração, não basta enviar código – é importante passá-lo por revisão. É aí que entram os Pull Requests, uma funcionalidade oferecida por plataformas como GitHub e GitLab. Um Pull Request (ou Merge Request, no GitLab) é, essencialmente, um pedido para mesclar as mudanças de uma branch (geralmente uma branch de feature) em outra (geralmente a
main
ou develop
). O fluxo comum é o seguinte: você cria uma branch para sua funcionalidade, faz commits nela, e ao terminar, faz o push da branch para o remoto:git push origin minha-feature
Em seguida, pelo site do GitHub/GitLab, você abre um Pull Request da branch
minha-feature
em direção à branch principal (por exemplo, main
). A equipe então pode revisar o código, fazer comentários e até commits adicionais no PR. Somente após a aprovação, a branch é mesclada e o PR é fechado. De forma geral, esse processo de Pull Request segue estas etapas: o desenvolvedor cria a feature numa branch dedicada, publica a branch no repositório remoto e abre um PR; o time revisa, discute e possivelmente ajusta o código; e por fim, o mantenedor do projeto faz o merge da feature no repositório oficial e encerra o PR.Os Pull Requests promovem boas práticas Git como revisão de código e integração contínua. Eles evitam que mudanças sejam mescladas sem avaliação, melhoram a qualidade do software e também servem como documentação das alterações (já que ficam registrados com comentários e aprovações). Portanto, sempre que for colaborar em equipe, utilize branches e PRs ao invés de enviar commits diretamente para a branch principal.
Reversão de mudanças: git checkout
(restore), git reset
e git revert
Nem sempre tudo sai perfeito, e às vezes precisamos desfazer ou reverter mudanças no Git. Aqui entram três comandos importantes:
git checkout
(no contexto de desfazer alterações em arquivos), git reset
e git revert
. Cada um tem seu propósito e boas práticas associadas.Descartando alterações não commitadas: se você editou um arquivo mas quer descartar as mudanças (voltar ao último commit), use
git restore <arquivo>
(ou o equivalente antigo git checkout -- <arquivo>
). Por exemplo:git restore App.js
Esse comando abandona quaisquer modificações feitas em
App.js
desde o último commit, efetivamente revertendo o arquivo para o estado em que estava no commit registrado. Cuidado: as mudanças descartadas assim serão perdidas permanentemente. Use com atenção para não jogar fora trabalho importante por engano.Removendo mudanças da staging area (unstage): Caso você tenha usado
git add
num arquivo errado e queira removê-lo da área de staging, utilize git reset HEAD <arquivo>
. Isso não altera o conteúdo do arquivo, apenas o retira da área de preparo, voltando ao estado de modificado. É útil para corrigir seleção de arquivos antes do commit. Desfazendo commits locais (
git reset
): git reset
movimenta a referência de HEAD e, opcionalmente, atualiza a staging area e o working directory, permitindo "apagar" commits do histórico local. Por exemplo, se você acabou de fazer um commit indevido, pode voltar atrás:git reset HEAD~1
Esse comando desfaz o último commit localmente. As mudanças daquele commit retornarão para a área de trabalho (ou staging, dependendo do modo). Por padrão (
--mixed
), o commit é removido do histórico e as modificações ficam como não adicionadas, para você corrigir e commitar novamente. Se usar --soft
, as mudanças permanecem staged; e com --hard
, o commit é removido e as mudanças são descartadas (perdidas). Use --hard
com extrema cautela, pois ele apaga alterações definitivamente.O
git reset
é ótimo para corrigir a história antes de compartilhar com o time (por exemplo, ajustar o último commit ou limpar commits de teste). Contudo, evite usá-lo em commits que já foram enviados ao remoto, pois isso reescreve o histórico e causará divergência para quem já baixou aquele commit.Revertendo commits já aplicados (
git revert
): para desfazer um commit que já foi realizado sem apagar o histórico, utilizamos git revert
. Esse comando cria um novo commit que introduz mudanças inversas ao commit especificado. Por exemplo, para reverter um commit específico:git revert 1a2b3c4
Isso gerará um novo commit que anula as alterações feitas no commit
1a2b3c4
(use o hash do commit alvo). O Git abrirá o editor para você confirmar/editar a mensagem do commit de reversão (por padrão, algo como "Revert '<mensagem do commit original>'"). Após salvar, o novo commit será criado, efetivamente adicionando ao histórico a informação de que aquele commit foi revertido.A grande vantagem do revert é a segurança: ele preserva todo o histórico, simplesmente adicionando um antídoto para um commit problemático. Isso é fundamental quando o commit já está no repositório remoto compartilhado – não devemos alterar a história que outros já baixaram. Em vez disso, fazemos um revert. Conforme a documentação, se tentássemos usar reset para remover um commit já publicado, teríamos conflitos porque o remoto não "esquece" um commit simplesmente. Portanto, git revert é a forma mais segura de desfazer um commit já compartilhado.
git reset
vs git revert
: Em resumo, o reset
apaga ou move commits na linha do tempo do seu repositório local (reescrevendo o histórico), enquanto o revert
cria um commit inverso que desfaz mudanças mantendo o histórico intacto. Use git reset
para ajustar commits locais (antes de fazer push) e use git revert
para desfazer alterações já enviadas ou quando desejar manter um registro claro da reversão. Seguindo essas boas práticas, você evita perdas de código e mantém o histórico consistente para todos os colaboradores.Resolução de conflitos de merge: passo a passo
Conflitos de merge são uma parte natural do trabalho em equipe com Git. Eles ocorrem quando duas pessoas (ou duas branches) modificam a mesma parte de um arquivo de formas diferentes, e o Git não consegue decidir automaticamente qual versão manter. Ao contrário do que parece, um conflito não é um bicho de sete cabeças – significa apenas que você precisa intervir manualmente para combinar as mudanças.
Vamos simular um cenário simples: imagine que a branch
main
e a branch feature
editaram a mesma linha em script.js
. Quando tentarmos mesclar a branch feature
na main
(git merge feature
estando na main
), o Git avisará algo como "Automatic merge failed; fix conflicts and commit the result." e marcará o arquivo como em conflito.Identificando arquivos em conflito: O próprio output do
git merge
listará os arquivos com conflito. Você também pode rodar git status
, que mostrará quais arquivos estão em estado de merge conflict. Digamos que script.js
esteja conflitando.Entendendo os marcadores de conflito: Abra o arquivo
script.js
no seu editor. Você verá trechos assim:<<<<<<< HEAD let mensagem = "Olá do Main"; ======= let mensagem = "Olá do Feature"; >>>>>>> feature
No exemplo acima, o que está entre
<<<<<<< HEAD
e =======
é o conteúdo da versão HEAD (ou seja, da branch atual, main
), e o que está entre =======
e >>>>>>> feature
é o conteúdo da branch que está sendo mesclada (no caso, chamada feature
). Seu trabalho é editar esse trecho para chegar ao conteúdo final desejado. Resolvendo o conflito: decida o que fazer com as diferenças. Talvez você queira manter a versão da feature, ou a da main, ou até combinar as duas. Por exemplo, poderíamos alterar para:
let mensagem = "Olá do Main e Feature"; // combinação das mudanças
Remova todos os marcadores (
<<<<<<<
, =======
, >>>>>>>
) e ajuste o código conforme necessário até que o arquivo faça sentido novamente. Marcando como resolvido e concluindo o merge: depois de editar todos os conflitos no arquivo, salve-o. Então execute:
git add script.js
Para informar ao Git que o conflito em
script.js
foi resolvido. Repita o processo para quaisquer outros arquivos conflitantes (adicionando cada um após resolver). Quando todos estiverem marcados como resolvidos, finalize o merge com:git commit -m "Resolve merge conflict entre main e feature"
O Git criará um commit de merge contendo as mudanças resultantes da sua resolução. Se preferir, você pode deixar sem
-m
para editar a mensagem de commit, ou simplesmente rodar git commit
que ele usará uma mensagem padrão indicando o merge. Dicas finais para conflitos: durante um conflito, nenhum conteúdo é perdido – as duas versões permanecem no arquivo até que você decida. Você pode abrir múltiplos arquivos se o conflito envolver mais de um, resolvendo um por um. Ferramentas de merge ajudam visualmente (como aquelas integradas em IDEs ou via
git mergetool
), mas o processo manual é exatamente o descrito: escolher versões e remover marcadores. Após resolver, é sempre bom compilar/executar os testes do projeto para garantir que a resolução não quebrou nada. Para resolver conflitos Git lembre-se do passo a passo: identificar arquivos conflitantes, abrir e editar removendo marcadores, adicionar (
git add
) os arquivos resolvidos e commitar o merge. Com a prática, você verá que os conflitos ficam menos assustadores e serão apenas mais uma etapa natural do fluxo de trabalho colaborativo.Dicas extras: git stash
, .gitignore
e aliases
Para fechar nosso guia, aqui vão algumas dicas e comandos úteis que podem facilitar sua vida com Git:
git stash
: sabe quando você está no meio de uma implementação e precisa pausar para atender outra demanda urgente ou mudar de branch sem comprometer mudanças em andamento? O comando git stash
guarda temporariamente as alterações não commitadas em uma espécie de "pilha" de mudanças. Ele salva seu trabalho sujo e limpa o diretório de trabalho, como se você tivesse feito um commit, mas sem realmente comprometer as alterações. Depois, quando quiser retomar, use git stash pop
para reaplicar a mudança guardada no seu código. Você pode guardar múltiplos stashes; use git stash list
para ver a lista. Essa funcionalidade é excelente para manter o foco e evitar commits parciais de coisas que não estão prontas..gitignore
: em todo projeto, há arquivos ou pastas que não devem ser versionados – seja por serem específicos do ambiente (configurações locais, credenciais) ou gerados automaticamente (builds, dependências instaladas como node_modules/
, etc). O arquivo .gitignore
lista padrões de nomes de arquivos que o Git deve ignorar. Por exemplo, um .gitignore
típico poderia conter:# Arquivos e pastas a serem ignorados node_modules/ *.log .env .DS_Store
Qualquer arquivo que corresponda a esses padrões não será mostrado no
git status
nem adicionado em commits (a menos que forçado). Lembre-se de criar/atualizar o .gitignore
antes de fazer os primeiros commits, para evitar que itens indesejados entrem no histórico. Se você esquecer e acabar versionando algo por engano (como node_modules
), ainda dá para remover retroativamente, mas dá mais trabalho – então é melhor prevenir com um .gitignore
bem feito.Aliases no Git: você pode criar atalhos para comandos Git frequentes usando aliases. Isso é configurado via
git config
também. Por exemplo, se achar git status
muito longo para digitar toda hora, defina um alias:git config --global alias.st status
Agora, ao invés de
git status
, basta usar git st
que o Git executará o comando completo. Você pode criar aliases para qualquer comando ou combinação de comandos – alguns devs gostam de git br
para git branch
, git co
para git checkout
, git ci
para git commit
, etc. Aliases não só economizam teclas, mas também podem ajudar a evitar erros de digitação em comandos longos. Vale personalizar o Git ao seu gosto!Essas dicas finais ajudam a tornar seu uso do Git mais confortável e produtivo, complementando os comandos fundamentais que vimos ao longo do artigo.
Boas práticas de versionamento com Git
Conhecer os comandos é metade do caminho; a outra metade é saber usá-los com sabedoria. Aqui estão algumas boas práticas Git que ajudam a manter um fluxo de trabalho saudável e um histórico de commits limpo:
- Commits atômicos e mensagens descritivas: procure organizar seu trabalho em commits atômicos, ou seja, cada commit deve idealmente conter apenas uma mudança lógica do projeto (uma funcionalidade, uma correção, etc.). Isso facilita rastrear problemas e, se preciso, reverter um commit sem impactar outras partes. Além disso, escreva mensagens de commit claras e concisas, explicando o que aquele commit introduz. Muitos times adotam convenções de mensagem como Commits semânticos (prefixos tipo
feat:
,fix:
antes da descrição) para padronizar o histórico. Ex:feat: adicionar validação de email no cadastro
já indica que o commit adiciona uma feature.
- Convenções de branches: mantenha um padrão para nomear e usar branches. Por exemplo, use uma branch principal chamada
main
(oudevelop
em certos fluxos) e crie branches de feature com nomes descritivos, comofeature/login-page
ou branches de correção comobugfix/corrigir-logout
. Essa consistência ajuda o time a entender o propósito de cada branch facilmente. Defina também a estratégia de branching do projeto (Git Flow, trunk-based, etc.) de acordo com o contexto, mas evite misturar estilos – siga um modelo para não virar bagunça.
- Integre e sincronize com frequência: não deixe sua branch ficar muito tempo afastada da
main
. Faça pulls frequentes da branch principal para a sua, ou rebase das alterações principais, de modo a resolver conflitos em doses homeopáticas em vez de tudo de uma vez no final. Da mesma forma, commite e envie suas mudanças regularmente – isso facilita integração contínua e diminui a chance de grandes conflitos ou retrabalho. Lembre: versionamento de código é um esforço coletivo, então mantenha seu código o mais atualizado possível em relação ao do time.
- Cuidado com
git push --force
: evite forçar push em repositórios compartilhados. Ogit push --force
sobrescreve o histórico remoto com o seu local, o que pode excluir commits que seus colegas fizeram (ou que você fez em outro computador) caso não estejam no seu histórico atual. Essa prática pode causar perda de trabalho e confusão. Se realmente precisar reescrever o histórico (por exemplo, para apagar um segredo exposto ou para arrumar commits bagunçados num projeto pessoal), prefira usar-force-with-lease
, que adiciona uma camada de segurança verificando se ninguém mais adicionou commits naquela branch. E sempre avise o time ao forçar um push, para que todos possam se alinhar. Em resumo: não use push forçado na branch principal e só use em branches de feature isoladas se souber exatamente o que está fazendo.
Seguindo essas boas práticas de Git e versionamento de código, seu repositório se manterá organizado, o histórico fará sentido e a colaboração fluirá muito melhor. Lembre-se: Git é uma ferramenta poderosa, e com grandes poderes vêm grandes responsabilidades – use-os para criar um código melhor em equipe!
Tabela rápida: resumo dos comandos Git
A seguir você encontra um resumo objetivo dos principais comandos Git, para consultas rápidas sempre que precisar:
Comando Git | Descrição geral |
git config | Configura opções do Git, como nome, e-mail e outras preferências. |
git init | Inicializa um novo repositório Git na pasta atual. |
git clone | Baixa uma cópia completa de um repositório remoto para sua máquina. |
git status | Exibe o estado atual dos arquivos do repositório. |
git add | Adiciona arquivos modificados à área de staging (preparo para commit). |
git commit | Grava as alterações da área de staging no histórico do projeto. |
git log | Exibe o histórico dos commits já realizados no projeto. |
git branch | Gerencia branches (ramificações), permitindo criar, listar ou apagar. |
git checkout / git switch | Troca a branch atual para outra existente. |
git checkout -b / git switch -c | Cria e muda para uma nova branch simultaneamente. |
git merge | Une alterações de uma branch específica à branch atual. |
git remote add | Vincula um repositório remoto ao repositório local atual. |
git remote -v | Lista as conexões remotas configuradas no repositório local. |
git push | Envia commits locais para o repositório remoto. |
git pull | Recebe e mescla alterações do repositório remoto na branch atual. |
git fetch | Baixa alterações do repositório remoto sem mesclá-las imediatamente. |
git restore | Descarta alterações não commitadas em arquivos específicos. |
git reset | Desfaz commits locais ou remove arquivos da área de staging. |
git revert | Cria um novo commit que desfaz as alterações feitas por um commit anterior. |
git stash | Salva temporariamente alterações não commitadas para posterior reaplicação. |
git stash pop | Reaplica as alterações salvas temporariamente com git stash . |
Conclusão
Você chegou ao fim deste guia de comandos Git! Vimos desde os primeiros passos, como
git init
e git commit
, até conceitos mais avançados de colaboração, resolução de conflitos e boas práticas. No ritmo acelerado de 2025, dominar o Git não é mais um diferencial – é uma necessidade básica para qualquer dev que queira criar projetos de forma profissional e em equipe.Mas nenhum guia substitui a prática. Por isso, nosso conselho é: mão na massa! Inicie um repositório para um projeto de estudo, experimente os comandos apresentados, simule merges e conflitos em um ambiente controlado. Só praticando você vai ganhar confiança e agilidade no uso do Git.
Lembre-se também que você não está sozinho nessa jornada. A comunidade de desenvolvedores é muito ativa, e a comunidade Rocketseat em particular está sempre pronta para ajudar e trocar conhecimento.
Esperamos que este artigo tenha esclarecido conceitos confusos e servido como um material de referência confiável para você. O próximo passo é continuar evoluindo. A Rocketseat está aqui para apoiar seu aprendizado contínuo – conte conosco nessa trajetória!
Gostou do conteúdo? Salve este guia nos seus favoritos para consulta rápida sempre que precisar tirar dúvidas- sobre Git!
Artigos_
Explore conteúdos relacionados
Descubra mais artigos que complementam seu aprendizado e expandem seu conhecimento.