Pular para o conteúdo principal

Questão de Engenharia de Software — Git — INSTITUTO AOCP 2024

Engenharia de SoftwareGit
Código
qa631589
Banca
INSTITUTO AOCP
Órgão
TRF 2
Ano
2024
Cargo
TJ TRF2

Em relação ao funcionamento interno e comandos avançados do Git, assinale a alternativa correta.

  1. AO comando “git rebase” cria um novo “commit” que representa a combinação de dois “commits” anteriores.
  2. BO Git utiliza uma estrutura de dados chamada hash SHA-1 para armazenar o histórico do repositório.
  3. CO comando “git cherry-pick” aplica mudanças de um “commit” específico de um “branch” para outro “branch”.
  4. DA estratégia de mesclagem “octopus” no Git é utilizada para resolver conflitos durante uma mesclagem de três vias (three-way merge).
  5. EO comando “git bisect” é usado para aplicar uma sequência de “commits” a partir de um “branch” em outro “branch”.
Revelar gabarito e comentário

GabaritoC — O comando “git cherry-pick” aplica mudanças de um “commit” específico de um “branch” para outro “branch”.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Git: comandos avançados e funcionamento interno

Gabarito: letra C. O comando git cherry-pick é exatamente o que a alternativa descreve: ele aplica as mudanças introduzidas por um commit específico em outro branch, sem mesclar o histórico completo do branch de origem. As demais alternativas trocam as funções de comandos distintos do Git, e é essa distinção que vamos explorar a fundo.

O Git é um sistema de controle de versão distribuído que trata os dados como um conjunto de imagens (snapshots) do sistema de arquivos. Cada commit — uma alteração consolidada no projeto — recebe um ID exclusivo de 40 caracteres, gerado por uma soma de verificação SHA-1. Essa é a base do funcionamento interno do Git: a integridade dos dados é garantida por esses checksums, e o histórico do repositório é construído a partir desses commits encadeados.

Quando falamos em integrar o trabalho de diferentes branches, o Git oferece duas famílias de comandos: os que mesclam históricos (merge) e os que reescrevem o histórico (rebase). O git merge cria um novo commit de mesclagem que une duas linhas de desenvolvimento, preservando o histórico de ambos os branches. Já o git rebase reaplica os commits de um branch sobre a ponta de outro, reescrevendo o histórico — o que é perigoso se os commits já foram publicados, pois quebra o repositório de quem já os baixou.

O git cherry-pick é uma terceira via: ele não mescla branches inteiros nem reescreve históricos. Ele copia um commit específico de um branch e o aplica em outro, como se você estivesse "colhendo" uma cereja de uma árvore e plantando em outra. Isso é útil quando você quer trazer uma correção pontual de um branch de desenvolvimento para o branch principal, sem trazer todos os outros commits daquele branch.

Outros comandos avançados completam o arsenal: o git bisect faz uma busca binária no histórico para encontrar o commit que introduziu um bug, e a estratégia de mesclagem "octopus" é usada para mesclar mais de dois branches ao mesmo tempo — não para resolver conflitos de three-way merge, que é o papel das estratégias "recursive" ou "ort".

A pegadinha desta questão é justamente a confusão entre comandos que parecem similares: cherry-pick (aplicar um commit específico), rebase (reaplicar uma sequência de commits) e merge (combinar históricos). Guarde essa fronteira: é exatamente nela que as alternativas se dividem.

Comando

Função principal

Efeito no histórico

git merge

Combina dois branches

Cria um novo commit de mesclagem, preservando o histórico de ambos

git rebase

Reaplica commits de um branch sobre a ponta de outro

Reescreve o histórico (perigoso se já publicado)

git cherry-pick

Aplica um commit específico de um branch em outro

Cria um novo commit com as alterações copiadas, sem mesclar históricos

git bisect

Busca binária para encontrar o commit que introduziu um bug

Não altera o histórico; apenas percorre commits

Estratégia "octopus"

Mescla mais de dois branches simultaneamente

Cria um commit de mesclagem múltipla

1Merge
Combina históricos
Cria commit de mesclagem
2Rebase
Reaplica commits sobre outra base
Reescreve o histórico
3Cherry-pick
Copia um commit específico
Aplica em outro branch
4Bisect
Busca binária por bug
5Octopus
Mescla múltiplos branches
Git: comandos de integração
LEVELsoulevel.com.br
Git: comandos de integração: Merge (Combina históricos, Cria commit de mesclagem); Rebase (Reaplica commits sobre outra base, Reescreve o histórico); Cherry-pick (Copia um commit específico, Aplica em outro branch); Bisect (Busca binária por bug); Octopus (Mescla múltiplos branches)

Alternativa A — ❌ Incorreta

A alternativa descreve o git merge, não o git rebase. O git rebase não cria um novo commit que combina dois anteriores; ele reaplica os commits de um branch sobre a base de outro, reescrevendo o histórico. O comando que cria um commit de mesclagem representando a combinação de dois históricos é o git merge.

Alternativa B — ❌ Incorreta

A alternativa está parcialmente correta, mas erra o algoritmo: o Git usa SHA-1 para gerar os checksums que identificam cada commit, mas a estrutura de dados que armazena o histórico não é o hash em si — é um grafo acíclico dirigido (DAG) de commits, onde cada commit aponta para seu(s) pai(s). O SHA-1 é o identificador, não a estrutura de armazenamento.

Alternativa C — ✅ Correta ⟵ GABARITO

Exatamente. O git cherry-pick aplica as mudanças de um commit específico de um branch para outro branch. Ele copia o commit selecionado e o aplica no branch atual, criando um novo commit com as mesmas alterações. É a ferramenta ideal para trazer correções pontuais entre branches sem mesclar históricos completos.

Alternativa D — ❌ Incorreta

A estratégia "octopus" é usada para mesclar mais de dois branches simultaneamente, não para resolver conflitos em um three-way merge. Conflitos em mesclagens de três vias são resolvidos pelas estratégias "recursive" (padrão) ou "ort", que combinam dois branches com um ancestral comum.

Alternativa E — ❌ Incorreta

O git bisect é usado para encontrar o commit que introduziu um bug, fazendo uma busca binária no histórico. Aplicar uma sequência de commits de um branch em outro é função do git rebase (ou do git merge, se você quiser preservar o histórico).

NÃO CAIA NESSA!

A banca troca as funções de comandos que parecem similares: cherry-pick (aplicar um commit específico), rebase (reaplicar uma sequência de commits) e merge (combinar históricos). O candidato que não domina a diferença entre eles cai na alternativa A ou E. Com treino, você enxerga essas trocas de longe 💪

PEGA ESSA DICA!

Para fixar, monte uma tabela mental: merge = combina históricos; rebase = reescreve histórico; cherry-pick = copia um commit específico; bisect = busca binária de bug; octopus = mescla múltiplos branches. Essa distinção é clássica em provas de Git.

Gabarito: letra C

Link permanente: /questoes/qa631589