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.