1
resposta

[Dúvida] Porque o exemplo da aula não deu conflito?

Olá, Fiz exatamente como foi feito em aula, salvando a alteração na linha do curso de Ansible no stash, depois fazendo a alteração na linha do curso de Kubernetes, fazendo o commit dessa alteração. Após isso, ao tentar recuperar o stash com o comando "git stash pop", ocorre o conflito. Eu entendo que, como a versão salva em stash tem a alteração da linha do curso de Ansible mas ainda não tem a alteração da linha do Kubernetes que foi feita no novo commit, esse conflito era esperado mesmo! A pergunta é: porque na execução em aula esse conflito não ocorre e o merge do que estava em stash é feito sem problemas?

Como eu salvei em stash (alteração na linha do Ansible): Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Como eu fiz o novo commit (alteração na linha do Kubernetes. Note que a linha do Ansible está inalterada após ter sido salvo o stash): Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Ao tentar recuperar o que foi salvo no stash, ocorre o conflito: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Porque isso não ocorreu com o Vinicius?!

1 resposta

Olá, Laercio! Tudo ok contigo?

Pelo que entendi, parece que você está fazendo tudo corretamente. A questão aqui é que o Git tenta mesclar as alterações automaticamente sempre que possível. No entanto, se duas alterações afetam a mesma linha de código (ou linhas muito próximas), o Git não pode decidir qual alteração deve prevalecer. Nesse caso, ele cria um conflito que deve ser resolvido manualmente.

Na aula, provavelmente, as alterações feitas pelo Vinicius não afetaram a mesma linha ou linhas próximas (isso porque havia uma linha separando as linhas que ele editou, que era o nome do curso de integração contínua, no seu caso as linhas editadas estão muito próximas), então naquele caso o Git conseguiu mesclar as alterações automaticamente.

No seu caso, como você fez alterações em linhas próximas demais, o Git não conseguiu decidir qual alteração deve prevalecer e, portanto, criou um conflito.

E se também pode ter acontecido de você editar na mudança do stash uma linha que você editou no commit da master, e isso pode ter sido outro motivo para isso acontecer.

Aqui está um exemplo para ilustrar meramente isso (não sei se foi o que aconteceu, mas é só para exemplificar):

  1. Você tem o seguinte código no seu arquivo index.html:

    <h1>Curso de Ansible</h1>
    <h1>Curso de Kubernetes</h1>
    
  2. Você altera a linha do curso de Ansible e salva essa alteração no stash:

    <h1>Curso de Ansible: Infraestrutura como código</h1>
    <h1>Curso de Kubernetes</h1>
    
  3. Em seguida, você altera a linha do curso de Kubernetes e faz um commit dessa alteração:

    <h1>Curso de Ansible</h1>
    <h1>Curso de Kubernetes: Introdução a orquestração de containers</h1>
    
  4. Agora, quando você tenta recuperar o stash, o Git vê que a mesma linha do código foi alterada tanto no stash quanto no commit mais recente. Ele não sabe se deve usar a alteração do stash ou a alteração do commit, então ele cria um conflito.

Espero que essa explicação tenha esclarecido a sua dúvida. Lembre-se de que resolver conflitos é uma parte normal do trabalho com o Git, e com um pouco de prática, você se tornará muito bom nisso!

Espero ter ajudado, abraços e bons estudos!