Dúvida no Merge do GitHub

13 respostas
J

Bom, tenho a seguinte situação.

Tenho uma máquina A com o projeto, e a máquina B tbm.
Mas alterei uns arquivos na máquina A mas não commitei, fiz um pull na máquina B, só que sem esse arquivo alterado, óbvio, alterei uns arquivos e fiz um push, mas quando voltei a máquina A para adicionar o arquivo e dar um push, ocorre o seguinte.

To [email removido]:jonatasdaniel/andorm.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '[email removido]:jonatasdaniel/projeto.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

Usei sempre o branch master, devia ter usado um branch para cada alteração, certo?
Mas como resolver esse impasse agora?

13 Respostas

A

Olá,
tenta as dicas desta questão no stack overflow: http://stackoverflow.com/questions/1713137/github-first-push-problem-how-to-merge-remote-changes, talvez ajude.

[]'s

G

Antes você precisa fazer um pull para deixar seu clone local up-to-date, para depois fazer um push para o remoto.

G

Desculpe o flood :slight_smile:

O Lucas Cavalcanti sempre me sugeriu usar um branch para quando trabalhamos com um fork, e deixar sempre o master para o que está no projeto original. Sempre que você implementar alguma coisa, faça um branch e trabalhe nele.

A vantagem disso é evitar conflitos e facilitar o trabalho de merge no projeto original.

J

Desculpe o flood :slight_smile:

O Lucas Cavalcanti sempre me sugeriu usar um branch para quando trabalhamos com um fork, e deixar sempre o master para o que está no projeto original. Sempre que você implementar alguma coisa, faça um branch e trabalhe nele.

A vantagem disso é evitar conflitos e facilitar o trabalho de merge no projeto original.

Sim, vacilei nisso, tbm sou novo com o Git e me perco as vezes, principalmente com merges :lol:

G

Quando você usa o pull ele faz o merge automagico. Se você usar o fetch, aí você precisa fazer o merge manualmente. Algumas vezes (raramente acontece) você precisa fazer o merge manual mesmo no pull, quando há conflitos. Mas aí é igual ao SVN e CVS: basta resolver os conflitos e fazer um novo commit.

O github tem um guia bem legal com essas pequenas coisas: help.github.com.

Abraços

J

garcia-jj:
Quando você usa o pull ele faz o merge automagico. Se você usar o fetch, aí você precisa fazer o merge manualmente. Algumas vezes (raramente acontece) você precisa fazer o merge manual mesmo no pull, quando há conflitos. Mas aí é igual ao SVN e CVS: basta resolver os conflitos e fazer um novo commit.

O github tem um guia bem legal com essas pequenas coisas: help.github.com.

Abraços

Acabei dando um ‘git push -f’ na máquina B, e vamos chegar em casa para tentar dar um pull :lol:
Qual seria o cenário ideal agora?
Tenho na máquina B algumas alterações já no repositório, e na máquina A tbm, mas apenas local. Como eu devo proceder?

G

Antes de qualquer push eu faço sempre um pull, assim ele pega as ultimas alterações no remoto (eu só nunca uso o -f a menos que seja alguma condição muito especial). Somente depois disso eu faço um push para o remoto.

J

Mas foi o que tentei fazer, com arquivos não ‘pusheados’, fui dar um pull para pegar as alterações para só então dar um push.

J

Resultado, cheguei em casa e fui dar um pull, ele reclamou de dois conflitos, eliminei esse arquivos pq tenho esses atualizados no repo, dei um push denovo e ele não trouxe todos arquivos do repositório, o que aconteceu agora? :cry:

G

Qual a mensagem que ele mostrou? Se for algo com “fast forward”, você precisa pegar as últimas atualizações do remoto via pull.

Se você faz um pull e depois um push, não tem como dar erro. Pode acontecer um erro no merge automatico do pull, mas no push é difícil acontecer.

pull => do remoto para o local, mesma coisa que o update do SVN
push => do local para o remoto

J

garcia-jj:
Qual a mensagem que ele mostrou? Se for algo com “fast forward”, você precisa pegar as últimas atualizações do remoto via pull.

Se você faz um pull e depois um push, não tem como dar erro. Pode acontecer um erro no merge automatico do pull, mas no push é difícil acontecer.

pull => do remoto para o local, mesma coisa que o update do SVN
push => do local para o remoto

Não estou na máquina onde ocorreu o problema, mas creio que foi essa msg sim.
Mas simplesmente fui dar um pull, então ele deveria trazer tudo que está no repositório certo?
Mas trouxe apenas alguns arquivos.

G

Deu algum erro ao fazer o “merge automatico” do pull? Caso sim você tem que resolver os conflitos, fazer um commit e aí sim fazer um push.

J

Sim ocorreu isso sim, e fiz como vc falou, mas do mesmo jeito os arquivos não vieram.

Criado 8 de março de 2011
Ultima resposta 9 de mar. de 2011
Respostas 13
Participantes 3