Resolver conflitos usando alterações remotas ao extrair do Git remote


297

Estou tentando extrair código do meu repositório do GitHub para o meu servidor, mas o recebimento continua falhando devido a conflitos de mesclagem. Não quero manter nenhuma das alterações que possam ter ocorrido no meu servidor local desde a última solicitação.

Então, existe uma maneira de forçar o Git a substituir por qualquer versão do GitHub, em vez de me incomodar com conflitos?



4
@nvm: Não. Trata-se de conflitos reais de mesclagem, não de arquivos não rastreados que seriam substituídos.
Cascabel

Respostas:


491

Se você realmente deseja descartar os commits que você fez localmente, ou seja, nunca tê-los novamente na história, você não está perguntando como puxar - puxar significa mesclar e não precisa mesclar. Tudo que você precisa fazer é o seguinte:

# fetch from the default remote, origin
git fetch
# reset your current branch (master) to origin's master
git reset --hard origin/master

Eu, pessoalmente, recomendo a criação de uma ramificação de backup em seu HEAD atual primeiro, para que, se você perceber que essa foi uma má ideia, não a tenha perdido de vista.

Se, por outro lado, você deseja manter esses commits e fazer com que pareça mesclar com a origem, e fazer com que a mesclagem mantenha as versões somente da origem, você pode usar a oursestratégia de mesclagem:

# fetch from the default remote, origin
git fetch
# create a branch at your current master
git branch old-master
# reset to origin's master
git reset --hard origin/master
# merge your old master, keeping "our" (origin/master's) content
git merge -s ours old-master

1
No segundo bloco de comandos git, deve haver uma 'origem de busca git' após o segundo comando?
David Tuite

@ David: Sim, você deve buscar a origem em algum momento. Desculpe, eu considerei isso implícito.
Cascabel

2
Não há nada que possa ser deixado implícito quando se trata de mim e git ;-). Sério, obrigado um milhão. Suas respostas são exatamente o que eu estava procurando.
David Tuite 27/01

1
Isso funcionará se a origem estiver realmente à frente? como em, também posso usá-lo se não tiver nenhum commit à frente e, de fato, o ramo pode ser acelerado?
Jared Forsyth

1
Obrigado! Fez parecer fácil.
sholsinger

137

Você pode usar a resposta do link duplicado apontado pelo nvm.

Ou você pode resolver conflitos usando as alterações deles (mas algumas podem ser mantidas se não conflitarem com a versão remota):

git pull -s recursive -X theirs

3
Não parece estar funcionando para mim. Eu recebo "error: unknown switch` X '"usando a versão 1.5.6.5 do git git. Preciso atualizar para uma versão instável?
David Tuite

Além disso, Antoine, se você quiser pegar a versão original de tudo, não apenas o conteúdo em conflito, pode - veja minha resposta.
Cascabel

2
@ David Você pode obter uma versão recente do git para debian em backports.debian.org
Arrowmaster

2
Era exatamente isso que eu estava procurando!
Micahblu

2
@CeesTimmerman Não é verdade, pelo menos no último git. XA opção é passada para mesclar a estratégia, que é apenas recursivese você mesclar duas cabeças, então seu comando irá reclamar "Could not find merge strategy 'theirs'. Available strategies are: octopus ours recursive resolve subtree."- é uma pena, porque Xpode ser definido na configuração (por exemplo git config pull.twohead theirs), mas snão pode.
OJFord 13/01/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.