Existe alguma maneira de reverter ou desfazer o git pull para que minhas fontes / repositórios cheguem ao estado antigo que era antes de executar o git pull? Eu quero fazer isso porque ele mesclou alguns arquivos que não queria, mas apenas mesclou outros arquivos restantes. Então, eu quero recuperar esses arquivos, isso é possível?
Edição: Eu quero desfazer git mesclar para esclarecimentos. Depois de ver algumas respostas, eu fiz isso
git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...
Agora, o que devo fazer? Está tudo git reset --hard
bem? Não quero estragar tudo de novo, pedindo etapas detalhadas?
git
version-control
git-merge
seg.server.fault
fonte
fonte
git reset --hard 01b34fa
neste caso, você poderia ter feito ogit reset --hard HEAD^
que redefine para um commit antes do HEAD.git reflog
mostrará tudo o que foi feito com o git. Existe uma preocupação quegit reset --hard [sha1 of something from reflog]
reverterá tudo o que é mostradoreflog
, que às vezes não é objetivo, por exemplo. você deseja reverter a mesclagem na ramificação principal extraída da origem com dados incorretos (acontece) e, depois disso, você trabalhou em outras ramificações.reflog
mostrará todas as alterações em outros ramos. Masgit checkout master
egit reset --hard [SH1 of commit on master branch just before merge]
redefinirá apenas a ramificação principal atual, removendo a mesclagem puxada da origem.Respostas:
A execução
git pull
executa as seguintes tarefas, em ordem:git fetch
git merge
A etapa de mesclagem combina ramificações que foram configuradas para serem mescladas na sua configuração. Você deseja desfazer a etapa de mesclagem , mas provavelmente não a busca (não faz muito sentido e não deve ser necessário).
Para desfazer a mesclagem , use
git reset --hard
para redefinir o repositório local para um estado anterior; use git-reflog para encontrar o SHA-1 do estado anterior e, em seguida, redefinir para ele.Atenção
Os comandos listados nesta seção removem todas as alterações não confirmadas, levando potencialmente a uma perda de trabalho:
Como alternativa, redefina para um momento específico, como:
fonte
master@{1}
, que é a posição anterior demaster
,master@{"5 minutes ago"}
oumaster@{14:30}
. Detalhes completos sobre a especificação de revisões dessa maneira podem ser encontrados emman git-rev-parse
, na seção chamada "especificação de revisões".Updating d2c90a3..035ac4d
. Aqui, você também pode usard2c90a3
como parâmetro para redefinir.O mesmo que a resposta do jkp, mas aqui está o comando completo:
onde a0d3fe6 é encontrado fazendo
e olhando para o ponto em que você deseja desfazer.
fonte
git reset HEAD --hard
, por exemplo?git reset --hard HEAD@{n}
funcionava #git reflog
: dab04ec HEAD @ {0}, aaaaaaa HEAD @ {1} e bbbbbbb HEAD @ {2}. Se o fizergit reset --hard bbbbbbb
, perderei o HEAD 0 e 1?Uma maneira mais moderna de desfazer uma mesclagem é:
E a maneira um pouco mais antiga:
A maneira antiga descrita nas respostas anteriores (aviso: descartará todas as alterações locais):
Mas, na verdade, vale a pena notar que isso
git merge --abort
é apenas equivalente aogit reset --merge
queMERGE_HEAD
está presente. Isso pode ser lido na ajuda do git para o comando mesclar.Após uma mesclagem com falha, quando não há
MERGE_HEAD
, a mesclagem com falha pode ser desfeita,git reset --merge
mas não necessariamente comgit merge --abort
, portanto , elas não são apenas uma sintaxe antiga e nova para a mesma coisa . É por issogit reset --merge
que considero muito mais útil no trabalho diário.fonte
git merge --abort
funciona durante uma mesclagem, não após agit pull
conclusão. Portanto, essa resposta parece irrelevante para a pergunta.git reset --merge
exclui todas as alterações não preparadas para confirmação. Descobri isso da maneira mais difícil.funciona primeiro uso:
git reflog
encontre seu SHA do seu estado anterior e faça (HEAD @ {1} é um exemplo)
fonte
Se você possui o gitk (tente executar "gitk --all a partir da linha de comando do git"), é simples. Basta executá-lo, selecione a confirmação para a qual você deseja reverter (clique com o botão direito do mouse) e selecione "Redefinir ramificação principal para aqui". Se você não tiver alterações não confirmadas, escolha a opção "hard".
fonte
Suponha que
$COMMIT
foi o último ID de confirmação antes de você executargit pull
. O que você precisa para desfazer a última atração égit reset --hard $COMMIT
.
Bônus:
Ao falar de puxar, gostaria de compartilhar um truque interessante,
git pull --rebase
Este comando acima é o comando mais útil na minha vida git, que economizou muito tempo.
Antes de enviar o commit recentemente ao servidor, tente este comando e ele sincronizará automaticamente as alterações mais recentes do servidor (com uma busca + mesclagem) e colocará o commit no topo do log do git. Não precisa se preocupar com puxar / mesclar manualmente.
Encontre detalhes em: http://gitolite.com/git-pull--rebase
fonte
Essa é a maneira mais fácil de reverter as alterações.
Faça backup dos seus arquivos alterados, pois eles excluirão os arquivos e pastas recém-criados .
Onde
9573e3e0
está seu {ID de confirmação}fonte
Updating ffce65bd..e929e884
, o façagit reset --hard ffce65bd
você pode fazer
git reset --hard ORIG_HEAD
já que "pull" ou "merge" definem ORIG_HEAD como o estado atual antes de executar essas ações.
fonte
git pull do abaixo da operação.
Para desfazer o pull, execute qualquer operação:
Melhoria:
Da próxima vez que usar, em
git pull --rebase
vez degit pull
... seu servidor de sincronização mudará executando (buscar e mesclar).fonte
Se houver uma falha na mesclagem, que é o motivo mais comum para querer desfazer uma
git pull
, a execuçãogit reset --merge
faz exatamente o que seria de esperar: mantenha os arquivos buscados, mas desfaça a mesclagem quegit pull
tentou mesclar. Então, pode-se decidir o que fazer sem a desordem quegit merge
às vezes gera. E não é necessário encontrar o ID exato de confirmação--hard
mencionado em todas as outras respostas.fonte