Pular para o conteúdo principal

Questão de Engenharia de Software — Geral — FGV 2026

Engenharia de SoftwareGeral
Código
fg157361
Banca
FGV
Órgão
TJ SC
Ano
2026
Cargo
Ana ( )

No sistema de controle de versão Git, há 3 comandos com nomes similares: reset, restore e revert.

 

Considerando esse contexto, relacione os comandos da coluna da esquerda às respectivas características, apresentadas na coluna da direita.

 

1. reset

 

2. restore

 

3. revert

 

( ) Restaura arquivos na árvore de trabalho (working tree) a partir do índice ou de outro commit, sem atualizar o ponteiro do seu branch.

 

( ) Atualiza o branch atual movendo o seu ponteiro (tip/HEAD) com o objetivo de adicionar ou remover commits, alterando o histórico do branch.

 

( ) Um novo commit é criado, revertendo alterações introduzidas por commits anteriores.

 

Assinale a opção que indica a relação correta, na ordem apresentada.

  1. A1 – 2 – 3.
  2. B1 – 3 – 2.
  3. C2 – 1 – 3.
  4. D2 – 3 – 1.
  5. E3 – 2 – 1.
Revelar gabarito e comentário

GabaritoC — 2 – 1 – 3.

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: reset, restore e revert

Gabarito: letra C. A relação correta é 2 – 1 – 3: restore restaura arquivos na árvore de trabalho sem mover o ponteiro do branch; reset move o ponteiro do branch para adicionar/remover commits, alterando o histórico; revert cria um novo commit que desfaz alterações de commits anteriores. A distinção central está no efeito sobre o histórico: reset o reescreve, enquanto revert o preserva adicionando um commit reverso.

Os três comandos fazem parte do conjunto de ferramentas de "desfazer" do Git, mas cada um atua em uma área diferente e com consequências distintas. O git restore é o mais recente (introduzido na versão 2.23) e foi criado para separar duas responsabilidades que antes ficavam misturadas no git reset: restaurar o conteúdo de arquivos (working tree e/ou index) sem tocar no histórico. Já o git reset é o comando clássico para mover o ponteiro do branch (HEAD) — ele pode desfazer commits, tirar arquivos da área de staging ou descartar alterações, dependendo do modo usado (--soft, --mixed, --hard). Por fim, o git revert é a operação segura para desfazer commits já publicados: em vez de apagar o commit, ele cria um novo commit que aplica as alterações inversas, preservando o histórico linear e permitindo que outros desenvolvedores integrem a correção sem conflitos de reescrita.

A pegadinha clássica desta questão é confundir reset com revert, pois ambos "desfazem" algo. A diferença crucial: reset remove commits do histórico (reescreve-o), enquanto revert adiciona um commit que anula os efeitos de commits anteriores (preserva o histórico). Outra confusão comum é entre restore e reset no modo --hard: ambos podem descartar alterações na working tree, mas restore não move o ponteiro do branch, enquanto reset --hard move o ponteiro e descarta tudo. Guarde a tríade: restore = arquivos (sem histórico), reset = ponteiro (reescreve histórico), revert = novo commit (preserva histórico).

Na prática, imagine que você fez três commits (A, B, C) e quer desfazer o commit B. Se usar git reset --hard HEAD~1, o commit C é removido e o branch volta para B — o histórico é reescrito. Se usar git revert B, um novo commit D é criado com as alterações inversas de B, e o histórico fica A-B-C-D. Se quiser apenas descartar uma alteração não commitada em um arquivo, git restore arquivo.txt resolve sem afetar o histórico. Essa distinção é exatamente o que a questão explora: cada característica descrita aponta para um comando específico, e a ordem correta é a que respeita essas definições.

Comando

Efeito no histórico

O que faz

restore

Não altera

Restaura arquivos na working tree a partir do índice ou de outro commit, sem mover o ponteiro do branch

reset

Reescreve (remove commits)

Move o ponteiro do branch (HEAD) para adicionar ou remover commits

revert

Preserva (adiciona commit)

Cria um novo commit que reverte alterações de commits anteriores

Alternativa A — ❌ Incorreta

A sequência 1 – 2 – 3 (reset, restore, revert) inverte as duas primeiras características. A primeira descrição (restaurar arquivos sem mover o ponteiro) é do restore, não do reset. O reset é justamente o comando que move o ponteiro do branch, como descrito na segunda característica. A banca troca os comandos para testar se o candidato sabe que restore não mexe no histórico.

Alternativa B — ❌ Incorreta

A sequência 1 – 3 – 2 (reset, revert, restore) também erra ao colocar reset na primeira posição. Além disso, inverte revert e restore: a segunda característica (mover o ponteiro do branch) é do reset, não do revert; e a terceira (criar novo commit revertendo alterações) é do revert, não do restore. O restore não cria commits — ele apenas restaura arquivos.

Alternativa C — ✅ Correta ⟵ GABARITO

A sequência 2 – 1 – 3 corresponde exatamente às definições: restore (2) restaura arquivos na working tree a partir do índice ou de outro commit, sem atualizar o ponteiro do branch; reset (1) atualiza o branch atual movendo o ponteiro (tip/HEAD) para adicionar ou remover commits, alterando o histórico; revert (3) cria um novo commit revertendo alterações introduzidas por commits anteriores. Cada comando é corretamente associado à sua função.

Alternativa D — ❌ Incorreta

A sequência 2 – 3 – 1 (restore, revert, reset) acerta o restore na primeira posição, mas troca revert e reset nas duas últimas. A segunda característica (mover o ponteiro do branch) é do reset, não do revert; e a terceira (criar novo commit revertendo) é do revert, não do reset. O reset não cria commits — ele move o ponteiro e pode descartar commits.

Alternativa E — ❌ Incorreta

A sequência 3 – 2 – 1 (revert, restore, reset) coloca revert na primeira posição, mas a primeira característica (restaurar arquivos sem mover o ponteiro) é do restore. Além disso, inverte restore e reset nas duas últimas: a segunda característica é do reset, e a terceira é do revert. Nenhuma das associações bate com as definições.

NÃO CAIA NESSA!

A banca explora a confusão entre reset e revert, pois ambos "desfazem" commits. Lembre-se: reset remove commits do histórico (reescreve-o), enquanto revert adiciona um commit que anula os efeitos de commits anteriores (preserva o histórico). Se a alternativa disser que revert altera o histórico removendo commits, está errada — ele cria um novo commit.

PEGA ESSA DICA!

Para não errar, associe cada comando a uma palavra-chave: restore = arquivos (não mexe no histórico), reset = ponteiro (move o branch, reescreve histórico), revert = novo commit (desfaz sem reescrever). Na prova, leia a descrição e identifique se ela fala de "restaurar arquivos", "mover ponteiro" ou "criar commit" — isso resolve a questão em segundos.

Gabarito: letra C

Link permanente: /questoes/fg157361