Controle de Versionamento com Git e GitHub

Por
Publicado em
6 min. de leitura

Olá, querida(o) estudante! Neste artigo, vamos estudar um tema extremamente importante no desenvolvimento moderno de software e cada vez mais presente em concursos públicos de Tecnologia da Informação: o controle de versionamento com Git e GitHub.

À medida que os sistemas se tornam maiores e mais complexos, torna-se inviável desenvolver software sem mecanismos que permitam rastrear alterações, recuperar versões anteriores e coordenar o trabalho entre múltiplos desenvolvedores. É justamente nesse contexto que surgem os sistemas de controle de versão.

Ao longo deste artigo, vamos entender como funciona o versionamento de código, quais são as principais características do Git, como ocorre o fluxo básico de trabalho em um repositório e quais conceitos costumam ser mais cobrados em provas.

O que é controle de versionamento

Controle de versionamento é o processo de registrar e gerenciar alterações realizadas em arquivos ao longo do tempo.

Na prática, isso significa que o sistema consegue:

  • armazenar diferentes versões do projeto
  • identificar quem realizou determinada alteração
  • recuperar versões anteriores
  • comparar modificações
  • permitir trabalho colaborativo

Esse mecanismo é fundamental para evitar perda de código e facilitar a manutenção dos sistemas.

Sistemas centralizados e distribuídos

Historicamente, os sistemas de versionamento eram centralizados. Nesse modelo, existe um servidor principal responsável por armazenar todo o histórico do projeto.

O Git segue uma abordagem diferente: ele é um sistema de controle de versão distribuído.

Isso significa que cada cópia clonada do repositório contém o histórico completo do projeto, permitindo maior independência e segurança.

Git e GitHub não são a mesma coisa

Uma confusão muito comum é considerar Git e GitHub como sinônimos.

O Git é o sistema de controle de versão em si. Já o GitHub é uma plataforma de hospedagem de repositórios Git.

Ou seja:

  • Git → ferramenta de versionamento
  • GitHub → serviço online que hospeda repositórios Git

É perfeitamente possível utilizar Git sem GitHub.

Repositório Git

O repositório é o local onde o Git armazena o histórico do projeto. Quando executamos o comando git init o Git cria um repositório local dentro da pasta do projeto. Esse repositório passa a controlar alterações nos arquivos presentes naquele diretório.

Working Directory, Staging Area e Commit

O fluxo básico do Git envolve três etapas importantes:

  • Working Directory: É a área onde os arquivos são modificados pelo desenvolvedor.
  • Staging Area: É uma área intermediária onde os arquivos são preparados para o próximo commit.
  • Commit: É o registro definitivo das alterações no histórico do projeto.

Esse fluxo é extremamente cobrado em concursos.

O papel do git add

O comando git add move arquivos da working directory para a staged area. Por exemplo: git add novoarquivo faz com que o arquivo passe a ficar preparado para inclusão no próximo commit.

Esse detalhe aparece frequentemente em provas envolvendo estados dos arquivos.

O que é um commit

O commit funciona como um “snapshot” do projeto em determinado momento.

Ao executar git commit -m “mensagem”, o Git registra as alterações preparadas na staged area.

Importante: o commit não envia automaticamente alterações para repositórios remotos. Essa é uma pegadinha clássica de banca.

Repositórios remotos

Além do repositório local, o Git permite conexão com repositórios remotos hospedados em plataformas como GitHub, GitLab e Bitbucket.

Os principais comandos relacionados são:

  • git push → envia alterações para o remoto
  • git pull → obtém alterações do remoto
  • git clone → cria uma cópia completa de um repositório

Git como sistema distribuído

Uma das maiores vantagens do Git é justamente o fato de cada clone possuir o histórico completo do projeto.

Isso traz benefícios importantes:

  • maior tolerância a falhas
  • possibilidade de trabalho offline
  • redundância do histórico
  • independência em relação ao servidor central

Por esse motivo, mesmo que um servidor apresente falha, o histórico ainda pode existir em repositórios clonados.

Branches e trabalho paralelo

Outro conceito fundamental do Git é o uso de branches. Uma branch representa uma linha independente de desenvolvimento. Isso permite que diferentes funcionalidades sejam desenvolvidas em paralelo sem comprometer o código principal. Posteriormente, essas alterações podem ser integradas por meio de operações de merge.

Rastreamento de alterações

O Git registra alterações de forma eficiente por meio de snapshots e hashes criptográficos. Isso permite:

  • identificar modificações
  • rastrear autoria
  • recuperar versões antigas
  • comparar mudanças

Esse rastreamento é uma das razões pelas quais o Git se tornou padrão no desenvolvimento moderno.

Vamos agora às questões de concurso!

1) Ano: 2025 Banca: UEM Órgão: UEM Prova: UEM – 2025 – UEM – Analista de Informática I

Sobre Git e versionamento de código, assinale a alternativa correta.

a) O Git permite rastrear alterações no código-fonte, possibilitando reverter versões anteriores quando necessário.

b) Para usar Git, é obrigatório ter um servidor externo como o GitHub.

c) Git é um serviço on-line de hospedagem de sites, similar ao Netlify.

d) Ao usar Git, todos os arquivos do projeto são sempre enviados automaticamente para o repositório remoto, garantindo que todos possam compartilhar o mesmo código-fonte.

e) No Git, o comando git commit envia automaticamente as alterações para o repositório remoto.

Gabarito: Letra A

Comentário:

a) Correta.
O Git foi projetado justamente para controlar versões de arquivos e rastrear alterações realizadas ao longo do desenvolvimento. Isso permite recuperar versões anteriores do projeto, comparar modificações e manter histórico completo das alterações realizadas pelos desenvolvedores.

b) Incorreta.
O Git funciona perfeitamente de forma local, sem necessidade de serviços externos como GitHub ou GitLab. Plataformas remotas são opcionais e utilizadas principalmente para compartilhamento e colaboração entre equipes.

c) Incorreta.
Git não é um serviço de hospedagem de sites. Trata-se de um sistema de controle de versão distribuído. Plataformas como GitHub podem até hospedar páginas web (GitHub Pages), mas isso não é a função do Git em si.

d) Incorreta.
O envio de arquivos para um repositório remoto não ocorre automaticamente. No Git, as alterações precisam passar pelo fluxo de add, commit e posteriormente push para serem compartilhadas com o repositório remoto.

e) Incorreta.
O comando git commit registra alterações apenas no repositório local, criando um snapshot do projeto naquele momento. Para enviar as alterações ao repositório remoto, normalmente utiliza-se o comando git push.


2) Ano: 2025 Banca: FCPC Órgão: UFC Prova: FCPC – 2025 – UFC – Técnico de Tecnologia da Informação / Área: Desenvolvimento de Software – Back-End

Sobre o sistema de controle de versionamento Git, é correto afirmar:

a) O Git possibilita que o usuário refaça um commit executando o comando git restore <arquivo_a_ser_adicionado_no_commit>.

b) O Git é um sistema de controle de versão distribuído, onde os repositórios clonados possuem o espelho completo do repositório, incluindo seu histórico.

c) Quando um servidor Git para de funcionar, as informações armazenadas somente podem ser recuperadas a partir de backups periódicos realizados nesse servidor.

d) Os arquivos identificados com o status staged em um repositório Git são aqueles que foram modificados, mas ainda não foram adicionados para serem enviados no próximo commit.

Gabarito: Letra B

Comentário:

a) Incorreta.
O comando git restore é utilizado para restaurar alterações em arquivos ou remover modificações locais, e não para “refazer commits”. O gerenciamento de commits envolve outros comandos, como git commit –amend, git reset ou git revert.

b) Correta.
O Git é um sistema de controle de versão distribuído. Isso significa que, ao clonar um repositório, o usuário obtém não apenas os arquivos atuais do projeto, mas também todo o histórico de commits e versões armazenadas.

c) Incorreta.
Como os repositórios clonados mantêm cópias completas do histórico, a perda de um servidor não implica necessariamente perda definitiva dos dados. Outros clones do repositório podem ser utilizados para recuperação das informações.

d) Incorreta.
Arquivos com status staged já foram adicionados à staging area por meio do comando git add, estando preparados para inclusão no próximo commit. Arquivos modificados que ainda não foram adicionados permanecem apenas como modified.


3) Ano: 2024 Banca: FUNCERN Órgão: IF-RN Prova: FUNCERN – 2024 – IF-RN – Analista de Tecnologia da Informação

Em relação ao uso da ferramenta de versionamento GIT, supondo que existe uma pasta denominada “meuprojeto” que foi inicializada com o comando git init e, portanto, possui um repositório para controlar o versionamento dos arquivos contidos nela, é correto afirmar:

a) após executar o comando git commit -m ‘feature x’, os arquivos contidos na “staged area” passam a ter o status “Untracked”.

b) ao criar um arquivo denominado “novoarquivo”, na pasta “meuprojeto”, por ele não estar no último “snapshot” do GIT, o novo arquivo fica marcado com o status “Modified”.

c) ao criar um arquivo denominado “novoarquivo”, na pasta “meuprojeto”, e executar o comando git add novoarquivo, o arquivo é enviado para a área denominada “staged area”.

d) se quisermos enviar todos os arquivos com o status “Modified” para o repositório local GIT, antes de realizar o “commit” desses arquivos com o status “Modified”, precisamos executar o comando git clone nos referidos arquivos.

Gabarito: Letra C

Comentário:

a) Incorreta.
Após a execução do git commit, os arquivos deixam a staged area e passam a integrar o último snapshot salvo no repositório. Eles não retornam ao estado Untracked.

b) Incorreta.
Arquivos recém-criados e ainda não adicionados ao controle de versão recebem o status Untracked, indicando que o Git ainda não está rastreando aquele arquivo.

c) Correta.
O comando git add novoarquivo envia o arquivo para a staging area, preparando-o para inclusão no próximo commit. Essa etapa funciona como uma área intermediária entre as alterações locais e o registro definitivo no histórico do projeto.

d) Incorreta.
O comando git clone é utilizado para criar cópias completas de repositórios existentes. Ele não possui relação com envio de arquivos modificados para commits locais.


Conclusão

O Git revolucionou a forma como software é desenvolvido, permitindo rastreamento eficiente de alterações, colaboração entre equipes e recuperação segura de versões anteriores.

Além de ser amplamente utilizado no mercado, o tema aparece com frequência crescente em concursos públicos, especialmente em provas voltadas para desenvolvimento de software e DevOps. Por isso, compreender conceitos como staged area, commit, repositórios distribuídos e versionamento é essencial tanto para a prática profissional quanto para um bom desempenho em provas.

Referências

  • CHACON, S.; STRAUB, B. Pro Git. Apress.
  • LOELIGER, J.; MCCULLOUGH, M. Version Control with Git. O’Reilly.
  • Git Documentation. Available at: https://git-scm.com/docs
  • FOWLER, M. Continuous Integration. Martin Fowler Website.
Terças e quintas de TI. Conteúdo prático e artigos especializados para acelerar seu conhecimento. Acesse agora!

Por
Publicado em
6 min. de leitura