git substitui a versão local pela versão remota

148

Como posso dizer ao git para ignorar meu arquivo local e pegar o arquivo do meu ramo remoto sem tentar mesclar e causar conflitos?

Ryudice
fonte
1
Consulte a resposta do SO " comando git para criar uma ramificação como outra " para todas as formas possíveis atuais de simulargit merge -s their .
VonC 13/03/11
Seria útil se você pudesse fornecer mais alguns detalhes. Deseja adotar o conteúdo de todos os arquivos da ramificação remota ou apenas de alguns arquivos (por exemplo, manter algumas versões / alterações locais)? Você tem algum histórico local que deseja manter? (Isso pode ser importante se houver outras ramificações ou repositórios que já incorporaram seu histórico local.) Se você deseja manter seu histórico local, o que planeja fazer com ele mais tarde? (Você pode deixar uma marca apontando para o histórico local e redefinir sua ramificação para o que o controle remoto possui, ou você pode “mesclar a deles”).
precisa

Respostas:

169

Esta é a solução mais segura:

git stash

Agora você pode fazer o que quiser, sem medo de conflitos.

Por exemplo:

git checkout origin/master

Se você deseja incluir as alterações remotas na ramificação principal, você pode:

git reset --hard origin/master

Isso fará com que você ramifique "mestre" para apontar para "origem / mestre".

Olivier Verdier
fonte
90
Pode valer a pena salientar que este irá separar HEAD - o entrevistador pode preferir permanecer no ramo comgit stash; git fetch origin; git reset --hard origin/master
Mark Longair
10
Eu acho que o comentário de Mark Longair é a resposta real a esta pergunta #
tem sido a resposta mais útil para mim +1
Andres
Como voltar ao estado antes do git stash? git stash listestá vazia.
Leo
Eu quero abraçá-lo
Ugur Kazdal
45

Entendo a pergunta da seguinte forma: você deseja substituir completamente o conteúdo de um arquivo (ou uma seleção) do montante. Você não deseja afetar o índice diretamente (portanto, você deve adicionar + confirmar, como de costume).

Simplesmente faça

git checkout remote/branch -- a/file b/another/file

Se você quiser fazer isso para subárvores extensas e desejar afetar o índice diretamente, use

git read-tree remote/branch:subdir/

Você pode (opcionalmente) atualizar sua cópia de trabalho fazendo

git checkout-index -u --force
ver
fonte
2
Isto é exatamente o que eu queria. Obrigado.
AutonomousApps
11

Meu entendimento é que, por exemplo, você salvou incorretamente um arquivo que atualizou apenas para fins de teste. Então, quando você executa o "status git", o arquivo aparece como "Modificado" e você diz algumas palavrões. Você só quer a versão antiga de volta e continua a funcionar normalmente.

Nesse cenário, você pode simplesmente executar o seguinte comando:

git checkout -- path/filename
Almir Campos
fonte
10

Gostaria de fazer o checkout do arquivo remoto do "master" (o repositório remoto / de origem) assim:

git checkout master <FileWithPath>

Exemplo: componentes principais do git checkout / indexTest.html

Birol Efe
fonte
Para mim funcionou como este "git controles remotos de checkout / origem / master <my-file>"
saravanakumar
4

Use a opção -sou --strategycombinada com a -Xopção. Na sua pergunta específica, você deseja manter todos os arquivos remotos e substituir os arquivos locais com o mesmo nome.

Substituir conflitos pela versão remota

git merge -s recursive -Xtheirs upstream/master  

usará a versão remota remota de todos os arquivos conflitantes.

Substituir conflitos pela versão local

git merge -s recursive -Xours upstream/master

usará a versão de repo local de todos os arquivos conflitantes.

csi
fonte