Dúvida no Merge do GitHub

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 git@github.com:jonatasdaniel/andorm.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com: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?

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

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

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.

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.[/quote]

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

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

[quote=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[/quote]

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?

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.

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.

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:

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

[quote=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[/quote]

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.

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.

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