Questão nº 35
Questão de Tecnologia da Informação · FCC TRT15 2024 (nº 35)
Durante o desenvolvimento de um projeto colaborativo no GitHub, um Técnico da equipe realizou commits diretamente na branch principal (`main`) sem passar por uma revisão de código via Pull Request. A prática mais indicada para corrigir essa situação e minimizar o impacto na equipe é:
- ACriar uma nova branch a partir do commit anterior às mudanças realizadas, mover os commits problemáticos para essa nova branch com o comando `git cherry-pick` e reverter os commits na branch principal. (alternativa correta)
- BExcluir os commits diretamente da branch principal com o comando `git reset --hard HEAD~n` e solicitar que todos os membros da equipe executem um `git pull --force`.
- CSolicitar que o desenvolvedor apague a branch principal do repositório remoto, recrie-a com a versão correta do código e envie as alterações novamente.
- DReverter os commits problemáticos utilizando o comando `git revert`, criando commits inversos diretamente na branch principal para apagar as alterações indesejadas.
- EUtilizar o comando `git undo --last-commits 3` para apagar os três últimos commits diretamente na branch principal, restaurando o estado anterior do código (podem ser apagados mais commits, se necessário).
Resposta comentada
Gabarito Alternativa A
Quando se trabalha em equipe com Git, a branch principal (como main ou master) deve ser sempre estável e ter um histórico limpo. Fazer commits diretos nela sem revisão é um erro, e a correção ideal envolve remover esses commits da main de forma segura, sem apagar o trabalho e permitindo que ele seja revisado depois.
- (A) Correta: Esta é a solução mais segura e recomendada. Primeiro, você cria uma nova branch a partir do ponto antes dos commits problemáticos. Em seguida, usa
git cherry-pickpara "copiar" esses commits para a nova branch, preservando o trabalho. Finalmente,git reverté usado na branch principal para criar novos commits que desfazem as alterações dos commits problemáticos, mantendo o histórico damainlinear e sem reescrevê-lo, o que é crucial para branches compartilhadas. O trabalho agora está na nova branch, pronto para um Pull Request e revisão adequada. - (B) Incorreta: O comando
git reset --hardreescreve o histórico, o que é extremamente perigoso em branches compartilhadas. Se outros membros da equipe já puxaram esses commits, umgit pull --forcepode causar perda de trabalho local ou conflitos complexos para eles, pois força a atualização da branch local para corresponder à remota, descartando alterações não sincronizadas. Armadilha da banca:git reset --hardparece uma solução rápida para "apagar" commits, mas ignora as consequências devastadoras para a colaboração. - (C) Incorreta: Apagar a branch principal (
main) de um repositório remoto é uma ação drástica e desnecessária que causaria grande interrupção para toda a equipe, exigindo que todos reconfigurassem seus repositórios locais. - (D) Incorreta: Embora
git revertseja a forma correta de desfazer commits em uma branch compartilhada sem reescrever o histórico, esta alternativa apenas reverte os commits. Ela não oferece uma maneira de preservar o trabalho para futura revisão em uma nova branch, o que é um objetivo importante ao corrigir a situação. A solução completa deve preservar o trabalho para que ele possa ser integrado corretamente depois. - (E) Incorreta:
git undonão é um comando Git padrão. Além disso, "apagar commits diretamente" geralmente implica reescrever o histórico, o que é problemático em branches compartilhadas.
Fonte: FCC TRT15 2024 Técnico Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.