git: Como obtenho a versão mais recente do meu código?

200

Estou usando o Git 1.7.4.1. Desejo obter a versão mais recente do meu código do repositório, mas estou recebendo erros ...

$ git pull
….
M   selenium/ant/build.properties
….
M   selenium/scripts/linux/get_latest_updates.sh
M   selenium/scripts/windows/start-selenium.bat
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'.

Excluí as cópias locais dos arquivos dos quais a ferramenta está reclamando, mas ainda recebo os erros. Como verifico a versão mais recente do repositório remoto? - Dave

Dave
fonte
1
A resposta de @ Kzqai abaixo me ajudou: tente fazer git fetchprimeiro. Eu não estava tendo conflitos, mas foi assim que obtive a versão mais recente do código.
Chris K

Respostas:

258

Se você não se importa com nenhuma alteração local (incluindo arquivos ou sub-repositórios não rastreados ou gerados que estão aqui) e deseja apenas uma cópia do repositório:

git reset --hard HEAD
git clean -xffd
git pull

Novamente, isso eliminará todas as alterações feitas localmente; portanto, use com cuidado. Pense rm -Rfao fazer isso.

Alex Curtis
fonte
1
Eu tentei esses comandos e ainda recebi o erro "CONFLITO (conteúdo): Mesclar conflito no selenium / ant / build.xml" (entre outros). Eu só quero substituir a versão mais recente do meu arquivo pelo que está no repositório. O que eu posso fazer??
Dave
31
git clean -fnão é realmente parte da resposta. Ele excluirá os arquivos que não estão sendo mantidos no repositório (por exemplo, no meu caso, arquivos de log); você não precisa fazer isso para voltar a git pulltrabalhar, basta git reset --hard HEAD.
Darren Cozinhe
12
Esh, cara, não recomende um dos poucos comandos de exclusão para obter iniciantes.
Kzqai
6
@ DarrenCook Eu acho que isso git clean -fé importante se você quiser uma limpeza real do seu repositoy. É o equivalente a fazer um "Excluir tudo da pasta -> Obter versão mais recente / Especificar" no TFS e, no meu caso, é isso que eu queria.
RPDeshaies
3
@ Darren Eu acho que o git clean -f`` também é importante. Quero obter a versão mais recente e não quero manter entradas de caches obsoletas ou outros recursos gerados que não estão no repositório. A resposta é clara sobre o fato de remover a alteração local e imitar a última versão do repositório, para que pareça perfeita para mim. Eu moveria meus arquivos de log para outro lugar se realmente precisar mantê-los entre as atualizações.
Balmipour
231

Caso 1: não se preocupe com alterações locais

  • Solução 1: obtenha o código mais recente e redefina o código

    git fetch origin
    git reset --hard origin/[tag/branch/commit-id usually: master]
    
  • Solução 2: exclua a pasta e clone novamente: D

    rm -rf [project_folder]
    git clone [remote_repo]
    

Caso 2: Cuidado com as mudanças locais

  • Solução 1: sem conflitos com a nova versão online

    git fetch origin
    git status
    

    relatará algo como:

    Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
    

    Então obtenha a versão mais recente

    git pull
    
  • Solução 2: conflitos com a versão nova online

    git fetch origin
    git status
    

    relatará algo como:

    error: Your local changes to the following files would be overwritten by merge:
        file_name
    Please, commit your changes or stash them before you can merge.
    Aborting
    

    Confirme suas alterações locais

    git add .
    git commit -m ‘Commit msg’
    

    Tente obter as alterações (falhará)

    git pull
    

    relatará algo como:

    Pull is not possible because you have unmerged files.
    Please, fix them up in the work tree, and then use 'git add/rm <file>'
    as appropriate to mark resolution, or use 'git commit -a'.
    

    Abra o arquivo de conflito e corrija o conflito. Então:

    git add .
    git commit -m ‘Fix conflicts’
    git pull
    

    relatará algo como:

    Already up-to-date.
    

Mais informações: Como uso o 'git reset --hard HEAD' para reverter para um commit anterior?

tvl
fonte
@ tvl.How posso receber as últimas atualizações sem cometer o meu código (ter conflitos) para branch..please me ajuda
user3354457
@ user3354457 xm, pergunta interessante. Eu nunca tentei isso antes, mas você pode experimentá-lo e reportá-lo de volta;) assim: - Faça um patch com as alterações: git diff> uncommited-changes.patch - Redefina o ramo - puxe as alterações - aplique o patch
tvl
3
Essa resposta merece muito mais votos do que a que foi aceita como resposta.
James
@ James :) Fico feliz que a minha resposta ajudá-lo. Dica, tente escrever uma documentação como se você não soubesse nada sobre um assunto e, definitivamente, a verbosidade o ajudasse a voltar.
Tv14
4
Melhor resposta completa para a busca do git. Este post deve ser bloqueado
Callat
17

Eu suspeito que o que aconteceu pode ser que você excluiu os arquivos que modificou (porque não se importava com essas alterações) e agora o git está aceitando a exclusão como uma alteração.

Aqui está uma abordagem que move suas alterações para fora da sua cópia de trabalho e para o "esconderijo" (recuperável, se realmente precisar que você precise delas novamente), para que você possa extrair as alterações mais recentes do montante.

git stash  
git pull

Se você quiser recuperar seus arquivos (conflitos em potencial com alterações de montante e tudo), execute a git stash applypara colar essas alterações no seu código. Dessa forma, você tem uma abordagem "desfazer".

Kzqai
fonte
1
Eu provavelmente recomendar usando git stash popmenos que você queira uma história de seus esconderijos git
Rapnar
7

Você precisa mesclar seus arquivos primeiro. Faça um git statuspara ver quais são os arquivos que precisam ser mesclados (significa que você precisa resolver os conflitos primeiro). Feito isso, faça git add file_mergede faça o seu pullnovamente.

Amokrane Chentir
fonte
2
Obrigado. Eu estava enfrentando esse problema. Tenho algumas alterações nos meus arquivos de trabalho, que não quero confirmar. Mas não posso fazer um git neste caso. Então eu faço - git stash, git pull --rebase, git stash pop. Em seguida, mesclar manualmente e git add file_merged
RuntimeException
6

tente este código

cd /go/to/path
git pull origin master
Amirouche Zeggagh
fonte
5
Bem-vindo ao Stackoverflow! Por favor, considere adicionar algumas explicações à sua solução para melhor descrever como ela resolve o problema. Isso fará com que suas respostas ainda mais útil
dkackman
2

Se você quiser apenas jogar fora tudo na sua pasta de trabalho (por exemplo, os resultados de uma fusão com falha ou interrompida) e reverter para uma confirmação anterior limpa, faça a git reset --hard.

damian
fonte
1

Entendo que você deseja descartar as alterações locais e remover o que está no seu controle remoto?

Se tudo mais falhar, e se você (compreensivelmente) tem medo de "redefinir", a coisa mais simples é clonar a origem em um novo diretório e jogar fora o antigo.

Dan Ray
fonte
1

Ao executar este comando, você obtém a tag mais recente que geralmente é a versão do seu projeto:

git describe --abbrev=0 --tags
ReCatCoder
fonte
0

Parece-me que você está tendo problemas essenciais. core.autocrlf = true pode causar problemas como os que você descreve no Windows se as novas linhas da CRLF tiverem sido verificadas no repositório. Tente desativar core.autocrlf para o repositório e execute uma reinicialização completa.

kusma
fonte
0

Se você estiver usando a GUI do Git, primeiro busque e depois mescle.

Buscar através do menu Remoto >> Buscar >> Origem. Mesclar através do menu Mesclar >> Mesclar local.

A seguinte caixa de diálogo é exibida.

insira a descrição da imagem aqui

Selecione o botão de opção ramo de rastreamento (também por padrão selecionado), deixe a caixa amarela vazia e pressione mesclar, e isso deve atualizar os arquivos.

Eu já havia revertido algumas alterações locais antes de executar essas etapas, pois queria descartá-las de qualquer maneira, para não precisar eliminá-las posteriormente.

zar
fonte