Problema com git push


Voltar para lista de tutoriais

Lembre-se que git push é o comando que irá colocar as mudanças “commitadas” no repositório local para o repositório remoto (por padrão, origin, que no nosso caso é o gitlab do ic). Imagine que você acabou de clonar o repositório da disciplina. A situação é essa:

origin:  c0 <--- c1

local:   c0 <--- c1

Ou seja, para o git, ocorreu o commit c0 e depois o c1 (na estrutura do git, cada commit aponta para seu parente). Como você acabou de clonar o repositório da disciplina, ambos estão iguais.

Digamos agora que você resolveu a tarefa 2 e “commitou” como t2. Como essa mudanças foram apenas locais, nossa situação é a seguinte:

origin: c0 <--- c1

local:  c0 <--- c1 <--- t2

Agora nosso repositório local possui modificações a mais do que o repositório remoto do GitLab. Caso desejamos colocar essas novas modificações no remoto, podemos fazer git push e o resultado será:

origin: c0 <--- c1 <--- t2

local:  c0 <--- c1 <--- t2

Digamos agora que você fez a tarefa 3 e “commitou” como t3. Mais uma vez, agora temos a seguinte situação:

origin: c0 <--- c1 <--- t2

local:  c0 <--- c1 <--- t2 <--- t3

Porém, antes de você sincronizar seu repositório local com o remoto, foi postada uma nova tarefa, a tarefa 4. Similarmente ao processo que fazemos manualmente, o sistema do prof Lehilton irá “commitar” a nova tarefa no seu repositório remoto do GitLab, digamos um commit t4.

origin: c0 <--- c1 <--- t2 <--- t4

local:  c0 <--- c1 <--- t2 <--- t3

Agora, se você tentar fazer git push você será aprensentado com um erro, nesse caso:

warning: redirecting to https://gitlab.ic.unicamp.br/mc202-2020/ra217938.git/
To https://gitlab.ic.unicamp.br/mc202-2020/ra217938
    ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://gitlab.ic.unicamp.br/mc202-2020/ra217938'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Isso acontece pois existem mudanças no repositório remoto que ainda não foram adicionadas ao seu repositório local. Como nessa disciplina o sistema nunca irá mexer nos mesmo arquivos que você, tudo que você precisa fazer é atualizar seu repositório local com git pull, o git fará um “merge” das duas “branchs”, criando assim m.

origin: c0 <--- c1 <--- t2 <--- t4
                                 ^
                                  \
                                   ----
                                       \
local:  c0 <--- c1 <--- t2 <--- t3 <--- m

E agora sim você poderá fazer git push para entregar sua tarefa.