Questão de Engenharia de Software — Github e Gitlab — FCC 2024
Engenharia de Software›Github e Gitlab
Código
fc147275
Banca
FCC
Órgão
TRT 7
Ano
2024
Cargo
AJ TRT7
Uma Analista estã trabalhando em um repositório GitHub, em condições ideais, e precisa mesclar uma branch chamada feature na branch main. No entanto, durante o merge, a Analista encontrou um conflito no arquivo index.bhtml. Após resolver o conflito manualmente, ela adicionou o arquivo ao indice, mas esqueceu de finalizar o merge. O comando a ser utilizado para finalizar o merge corretamente é:
Aqit push origin main to feature
Bgit commit -x "Merge branch 'feature' into 'main' "
Cgit merge --continue
Dgit rebase --continue
Egit commit --amend
Revelar gabarito e comentário▾
GabaritoC — git merge --continue
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: Finalizando um Merge com Conflito
Gabarito: letra C. Após resolver manualmente os conflitos de um merge e adicionar os arquivos resolvidos à área de preparo (staging), o comando que finaliza o merge é o git merge --continue. Esse comando instrui o Git a concluir o processo de merge que foi pausado por causa dos conflitos, criando o commit de merge com a mensagem padrão.
O Git é um sistema de controle de versão distribuído que organiza o projeto em três áreas principais: o diretório de trabalho (onde os arquivos são editados), a área de preparo (staging area, onde as alterações são registradas antes do commit) e o repositório (onde o histórico é armazenado). Quando você executa git merge feature para integrar a branch feature na main, o Git tenta combinar as alterações automaticamente. Se houver conflitos — ou seja, se as mesmas linhas de um arquivo foram modificadas de maneiras diferentes nas duas branches — o merge é pausado e o Git marca o repositório como estando em estado de merge.
Nesse estado, o Git informa quais arquivos estão conflitantes. A Analista resolveu o conflito no arquivo index.bhtml manualmente e o adicionou à área de preparo com git add. Porém, o merge ainda não foi concluído: falta criar o commit de merge. É exatamente isso que o git merge --continue faz. Ele verifica se todos os conflitos foram resolvidos e se as alterações estão na área de preparo, e então finaliza o merge com um commit, usando a mensagem padrão de merge (ou a mensagem que você especificar).
A distinção crucial aqui é entre merge e rebase. O git merge integra as branches preservando o histórico de commits de ambas, criando um commit de merge. O git rebase reescreve o histórico, aplicando os commits de uma branch sobre a outra, resultando em um histórico linear. Quando um rebase encontra conflitos, o comando para continuar é git rebase --continue, não git merge --continue. A banca explora exatamente essa confusão: o candidato que sabe que precisa "continuar" após resolver conflitos pode trocar o comando de merge pelo de rebase, ou vice-versa.
Outra pegadinha comum é confundir git commit --amend com a finalização do merge. O --amend é usado para alterar o commit mais recente, modificando sua mensagem ou adicionando arquivos que foram esquecidos. Ele não tem relação com a conclusão de um merge em andamento. Da mesma forma, git push é usado para enviar commits locais para um repositório remoto, e não para finalizar um merge local.
Guarde a fronteira: merge pausado por conflito → git merge --continue; rebase pausado por conflito → git rebase --continue. É exatamente nessa distinção que as alternativas se dividem.
1git merge feature
2Resolver conflito
3git add <arquivo>
4git merge --continue
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
O comando git push origin main to feature não é um comando Git válido. O git push é usado para enviar commits do repositório local para um remoto, mas a sintaxe correta é git push <remote> <branch>. Além disso, o push não finaliza um merge local; ele apenas publica as alterações já commitadas. A Analista precisa primeiro concluir o merge localmente antes de pensar em enviar as alterações para o repositório remoto.
Alternativa B — ❌ Incorreta
O comando git commit -x "Merge branch 'feature' into 'main'" não é válido. A opção -x não existe no Git para o comando commit. Para criar um commit com uma mensagem, a opção correta é -m (de message), como em git commit -m "mensagem". Além disso, mesmo que a sintaxe estivesse correta, um git commit simples não é a forma adequada de finalizar um merge que foi pausado por conflitos. O Git espera que você use git merge --continue para que ele possa registrar corretamente o commit de merge, com os pais apropriados (as duas branches que estão sendo mescladas).
Alternativa C — ✅ Correta ⟵ GABARITO
O comando git merge --continue é exatamente o que a Analista precisa. Após resolver os conflitos e adicionar os arquivos à área de preparo, esse comando instrui o Git a finalizar o merge em andamento. O Git verificará se não há mais conflitos e criará o commit de merge, concluindo a integração da branch feature na main. É a forma canônica de retomar um merge interrompido por conflitos.
Alternativa D — ❌ Incorreta
O comando git rebase --continue é usado para continuar um rebase que foi pausado por conflitos, não um merge. O rebase é uma operação diferente do merge: ele reescreve o histórico de commits, aplicando os commits de uma branch sobre a outra de forma linear. Se a Analista estivesse fazendo um rebase, este seria o comando correto. Mas o enunciado afirma explicitamente que ela está fazendo um merge (git merge), então o comando correto é git merge --continue. A banca troca o comando de merge pelo de rebase para confundir o candidato que não domina a diferença entre as duas operações.
Alternativa E — ❌ Incorreta
O comando git commit --amend é usado para modificar o commit mais recente do histórico. Ele pode alterar a mensagem do commit ou adicionar arquivos que foram esquecidos no commit anterior. No entanto, ele não é usado para finalizar um merge em andamento. Quando um merge é pausado por conflitos, o Git não criou um commit de merge ainda; ele está aguardando que você resolva os conflitos e finalize o processo. Usar --amend aqui não faria sentido, pois não há um commit de merge para alterar. O comando correto para concluir o merge é o git merge --continue.
NÃO CAIA NESSA!
A banca adora trocar merge por rebase e vice-versa. Ambos são operações de integração de branches, mas têm propósitos e comandos de continuação diferentes. Quando o enunciado disser "merge", o comando para continuar após conflitos é git merge --continue; quando disser "rebase", é git rebase --continue. Memorize essa distinção e você não cairá nessa armadilha. 💪
PEGA ESSA DICA!
Para fixar, lembre-se do fluxo completo de um merge com conflito: (1) git merge feature → conflito; (2) edite os arquivos conflitantes; (3) git add <arquivos>; (4) git merge --continue. Esse é o caminho padrão. Se a questão mencionar rebase, o fluxo é o mesmo, mas o comando final é git rebase --continue.