Bem, sim e não ...
Eu entendo que você deseja que suas cópias locais "substituam" o que está no remoto, mas, cara, se alguém modificou os arquivos no repositório remoto de alguma maneira diferente , e você simplesmente ignora as alterações e tenta "forçar" suas próprias mudanças, mesmo sem olhar para os possíveis conflitos, bem, eu choro por você (e seus colegas de trabalho) ;-)
Dito isso, é realmente fácil fazer a "coisa certa ..."
Passo 1:
git stash
em seu repositório local. Isso salvará suas atualizações locais no estoque e, em seguida, reverterá seus arquivos modificados de volta ao estado de pré-edição.
Passo 2:
git pull
para obter qualquer versão modificada. Agora, com sorte, isso não gerará nenhuma nova versão dos arquivos com os quais você está preocupado. Caso contrário, a próxima etapa funcionará sem problemas. Se ele faz , então você tem algum trabalho a fazer, e você será feliz que você fez.
Etapa 3:
git stash pop
Isso irá mesclar suas versões modificadas que você guardou na Etapa 1 com as versões que você acabou de obter na Etapa 2. Se tudo correr bem, você estará pronto!
Se, por outro lado, houver conflitos reais entre o que você puxou na Etapa 2 e suas modificações (devido à edição de outra pessoa nesse ínterim), você descobrirá e receberá instruções para resolvê-los. Faça.
As coisas funcionarão muito melhor desta forma - provavelmente manterá suas alterações sem nenhum trabalho real de sua parte, enquanto o alertará sobre problemas sérios.
git commit
mudanças locais antesgit pull
?Você pode esconder suas alterações locais primeiro, depois puxar e depois abrir o esconderijo.
Qualquer coisa que substitua as alterações remotas terá conflitos que você terá que resolver manualmente.
fonte
Então você comprometeu suas mudanças locais em seu repositório local. Então, para obter mudanças remotas em seu repositório local sem fazer mudanças em seus arquivos locais, você pode usar
git fetch
. Na verdade,git pull
é uma operação de duas etapas: uma não destrutivagit fetch
seguida por agit merge
. Veja Qual é a diferença entre 'git pull' e 'git fetch'? para mais discussão.Exemplo detalhado:
Suponha que seu repositório seja assim (você fez alterações
test2
:E o
origin
repositório é assim (alguém fez um committest1
):Neste ponto, o git reclamará e pedirá que você faça o pull primeiro, se você tentar empurrar
test2
para o repositório remoto. Se você quiser ver o que é test1 sem modificar seu repositório local, execute isto:Seu repositório local de resultados seria assim:
Agora você tem as alterações remotas em outro branch e mantém seus arquivos locais intactos.
Então o que vem a seguir? Você pode fazer um
git merge
, que terá o mesmo efeito quegit pull
(quando combinado com o anteriorgit fetch
), ou, como eu preferiria, fazer umgit rebase origin/master
para aplicar sua alteração em cimaorigin/master
, o que lhe dará um histórico mais limpo.fonte