Resolvendo conflitos de Git

Juliana Pavan
Zero e Umas
Published in
5 min readApr 27, 2020

--

Eu não sei vocês, mas sempre que eu mexia com Git, o meu pior pesadelo eram os conflitos. E o medo de você subir seu projeto para o GitHub e se deparar com um conflito? Quem ia resolver isso? Eu que não entendia nada de conflitos? Mas então, um dia eu decidi mudar isso e lutar contra esse monstro de sete cabeças que eu chamo de conflito. E ao conseguir derrotar esse monstro, pensei que devia haver outras pessoas como eu, e decidi compartilhar esse conhecimento. Vou mostrar aqui alguns tipos de conflito simples e como podemos resolvê-los.

Em primeiro lugar, como se dá um conflito?

Bem, um conflito é gerado quando duas pessoas mexem em um mesmo arquivo de código, gerando incompatibilidade com o arquivo que se encontra no repositório.

Não entendeu? Fica tranquila já que não vou apenas jogar palavras difíceis para você! Vamos ver um exemplo visual.

Bem, vamos tomar como exemplo a equipe Dorime, que usa o GitHub como ferramenta de versionamento, e eles neste momento estão trabalhando em um projeto que chamaremos de “Flores em Conflito”.

Este projeto já consta no GitHub deles, em uma Branch A, porém com pouco código escrito nele, apenas para inicializar o projeto.

Eu e a Maria, que estamos na equipe Dorime, queremos mexer no código do Projeto, então puxamos para nossas máquinas o projeto que consta na Branch A.

Então, vamos imaginar que ambas alterem o projeto, no mesmo arquivo, e então nós duas queremos mandar o projeto com nossas mudanças para o GitHub.

Quando o projeto que eu mandei para o GitHub é aceito e faz merge com o projeto já existente, este agora contem as alterações que eu havia feito. Porém, o arquivo que a Maria possui, era o projeto sem minhas alterações, o projeto de cor lilás. E agora que ela fez alterações nesse projeto e tenta subir, o conflito aparece. Isso ocorre pois o projeto que está no repositório contém minhas alterações e o projeto que a Maria possui, apenas contem as alterações dela.

Mas e agora? Como eu resolvo isso?

Calma jovem padawan, não se desespere, eu sei que parece um bicho de sete cabeças mas iremos vencer essa batalha. Podem existir diversos conflitos, porém irei explicar como resolver um conflito de código.

Conflito de código

Então, imaginemos que ambas querem mexer em trechos de códigos já existentes, como os parâmetros de uma função. O que temos até agora no nosso código é:

import UIKitclass ViewController: UIViewController {

var flor: String = "Margarida"
override func viewDidLoad() { super.viewDidLoad()
}

func criarFlor(nomeFlor: String) {
}}

Seguindo o exemplo da equipe Dorime, imaginemos que eu e Maria tentássemos mudar os parâmetros da função já existente “criarFlor”, porém fazemos alterações diferentes: eu adiciono um parâmetro “cor” e a Maria um parâmetro “tamanho”.

Então, a minha função ficaria:

func criarFlor(nomeFlor: String, cor: String) {}

E a função da Maria ficaria:

func criarFlor(nomeFlor: String, tamanho: Double) {}

Agora que ambas já fizeram as alterações desejadas, elas vão subir para o GitHub, na Branch A. Então, a Maria sobe o projeto dela, com as alterações dela. Agora eu vou subir o meu projeto também (git add + git commit) porém, quando tento subir para a branch, olha quem encontramos aqui: um conflito!

Conflito ocorrendo, visto pelo terminal

Lembrando: sem desespero! Vamos resolver esse conflito: primeiro, vemos onde ocorreu o erro.

Indicação do arquivo que possui conflito, visto pelo terminal

E então, tentaremos abrir o arquivo para consertarmos. Você pode utilizar o próprio Xcode, um editor de texto ou alguma ferramenta como o Visual Studio Code, para ter uma melhor visualização.

Quando abrirmos esse arquivo, teremos que procurar pelo erro. Sempre devemos procurar pelos sinais abaixo, já que eles indicam o erro.

“<<<<<< HEAD

========

>>>>>>>>> ("nome" do commit)“

Na imagem abaixo, podemos ver como o erro seria visto no Xcode.

Erro visualizado no Xcode

Nesta próxima imagem, podemos ver como é visualizado pelo Visual Studio Code e percebemos que nesta ferramente o erro é indicado com cores, assim conseguimos achá-lo mais rapidamente.

Erro visualizado no Visual Studio Code

Nesse caso, conseguimos visualizar facilmente já que não possuímos muitas linhas de código. Vendo a imagem com o erro no Visual Studio Code, vemos que a primeira parte, que consta em verde, mostra a parte do meu código que possui conflito. Já a segunda parte, que consta em azul, mostra a parte do código da Maria que entrou em conflito.

Para resolver esse conflito, poderei adicionar o parâmetro que a Maria criou na função ou apagá-lo. Então, apagarei os sinais de erro, deixando apenas a função com as correções.

Erro sendo resolvido pelo VS Code

Para finalizar, após as correções, iremos dar um git add, um git commit e então, um git push para mandar para o repositório remoto. E assim, resolvemos o nosso conflito!

Considerações finais

  • Para resolver conflitos, pode-se utilizar o GitHub, porém eu prefiro não utilizar já que o modo que expliquei acima é mais visual e consigo ver exatamente o que está sendo alterado no projeto. Além disso, muitas vezes o GitHub fala que há um conflito porém não diz onde ele se encontra.
  • Tenha Pull Request! Nas configurações da branch, você consegue bloqueá-la e então os integrantes do equipe são obrigados a fazer um PR. Você também pode especificar quantas aprovações esse PR necessita para ser aceito no projeto.
  • Sempre que for fazer alguma alteração no projeto, antes, faça um git pull para ter certeza que você está atualizado com o repositório remoto!

--

--