Digamos que o remoto é origin
e o branch está master
, e digamos que você já tenha feito master
check-out, pode tentar o seguinte:
git fetch origin
git reset --hard origin/master
Isso basicamente pega o branch atual e o aponta para o HEAD
branch remoto.
AVISO : conforme declarado nos comentários, isso descartará as alterações locais e substituirá o que estiver na origem .
Ou você pode usar os comandos de encanamento para fazer essencialmente o mesmo:
git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard
EDIT: Eu gostaria de explicar brevemente por que isso funciona.
A .git
pasta pode conter os commits para qualquer número de repositórios. Como o hash de confirmação é na verdade um método de verificação para o conteúdo da confirmação, e não apenas um valor gerado aleatoriamente, ele é usado para combinar conjuntos de confirmação entre repositórios.
Um branch é apenas um ponteiro nomeado para um determinado hash. Aqui está um exemplo de conjunto:
$ find .git/refs -type f
.git/refs/tags/v3.8
.git/refs/heads/master
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
Cada um desses arquivos contém um hash apontando para um commit:
$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b
Todos eles são para o mecanismo de armazenamento git interno e funcionam independentemente do diretório de trabalho . Fazendo o seguinte:
git reset --hard origin/master
git irá apontar o branch atual com o mesmo valor hash para o qual origin / master aponta. Em seguida, ele altera à força o diretório de trabalho para corresponder à estrutura / conteúdo do arquivo naquele hash.
Para ver isso no trabalho, vá em frente e tente o seguinte:
git checkout -b test-branch
# see current commit and diff by the following
git show HEAD
# now point to another location
git reset --hard <remote>/<branch>
# see the changes again
git show HEAD
Eu tive sorte com
em uma situação semelhante.
http://www.kernel.org/pub//software/scm/git/docs/git-checkout.html
Desfazer exclusão no GIT
fonte
Resolvido, usando o seguinte conjunto de comandos:
O truque é rebase as alterações ... Tivemos alguns problemas para rebasear um commit trivial, então simplesmente pulamos usando git rebase --skip (depois de copiar os arquivos).
fonte
Se acontecer de você ter esse problema depois de executar um
git fetch
e o git não estiver permitindo que você executegit pull
por causa de um conflito de mesclagem ( arquivos modificados / não mesclados , e para deixá-lo mais frustrado, ele não mostrará nenhum marcador de conflito no já que ainda não foi fundido). Se você não deseja perder seu trabalho, faça o seguinte.preparar o arquivo.
em seguida, esconda as alterações locais.
puxar e atualizar seu diretório de trabalho
restaure seu arquivo local modificado (o git irá mesclar automaticamente se puder, caso contrário, resolvê-lo)
Espero que ajude.
fonte
Existe uma solução, mesmo se você não quiser remover suas alterações locais. Basta corrigir os arquivos não mesclados (por
git add
ougit remove
). Então façagit pull
.fonte
Supondo que você queira descartar quaisquer alterações que tenha, verifique primeiro a saída de
git status
. Para qualquer arquivo que diga "não mesclado" próximo a ele, executegit add <unmerged file>
. Em seguida, faça o acompanhamento comgit reset --hard
. Isso eliminará quaisquer alterações locais, exceto para arquivos não rastreados.fonte
git status
?git rebase --abort
e degit pull --rebase
acordo com a sugestão do gitEu fui resolvido com git remove o arquivo unmerged localmente.
Quando eu envio git commit depois:
fonte
A resposta de Ryan Stewart estava quase lá. No caso em que você realmente não deseja excluir suas alterações locais, há um fluxo de trabalho que você pode usar para mesclar:
git status
. Ele lhe dará uma lista de arquivos não mesclados.git commit
O Git fará o commit apenas dos merges em um novo commit. (No meu caso, adicionei arquivos adicionais no disco, que não foram incluídos naquele commit.)
O Git então considera a fusão bem-sucedida e permite que você siga em frente.
fonte