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?
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.
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.
[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.
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?
[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.