Eu estava trabalhando em algo e decidi que estava completamente ferrado ... depois de ter cometido um pouco disso. Então, tentei a seguinte sequência:
git reset --hard
git rebase origin
git fetch
git pull
git checkout
Nesse momento, recebi a mensagem
Your branch is ahead of 'origin/master' by 2 commits.
Quero descartar minhas confirmações locais , sem precisar apagar meu diretório local e baixar novamente tudo. Como posso conseguir isso?
git fetch
egit pull
pull é uma combinação de busca e mesclagem.Respostas:
removerá todas as confirmações fora de
origin/master
ondeorigin
está o nome do repositório emaster
é o nome da ramificação.fonte
origin/master
é um ramo que rastreia omaster
ramo doorigin
repositório remoto.origin/master
é uma referência aomaster
ramo do controle remoto chamadoorigin
.Como um aparte, além da resposta de mipadi (que deve funcionar a propósito), você deve saber o seguinte:
também faz exatamente o que você deseja sem
having to redownload everything
(sua citação parafraseada). Isso ocorre porque seu repositório local contém uma cópia do repositório remoto (e essa cópia não é a mesma que o diretório local, nem mesmo a sua filial com check-out).A eliminação de uma ramificação é perfeitamente segura e a reconstrução dessa ramificação é muito rápida e não envolve tráfego de rede. Lembre-se, o git é basicamente um repositório local por design. Até filiais remotas têm uma cópia no local. Há apenas alguns metadados que informam ao git que uma cópia local específica é na verdade uma ramificação remota. No git, todos os arquivos estão no seu disco rígido o tempo todo.
Se você não possui nenhum ramo que não seja o mestre, você deve:
fonte
Cannot delete the branch 'master' which you are currently on.
git checkout -b temp;git branch -D master;git checkout master;git branch -D temp
origin/master
sua máquina local. Essa é a sua cópia local (completa) da filial remota. O ramo remoto real éorigin master
.git branch -D master
não fosse necessário, pois, como apontado, gera um erro.O que faço é tentar redefinir o disco com HEAD. Isso eliminará todos os commits locais:
fonte
^
representa o commit pai, portanto, redefinir paraHEAD^
descartar alterações não confirmadas e mover o branch para o commit anterior, "efetivamente" excluindo "o commit mais recente (embora o commit ainda exista, o branch simplesmente não aponta para ele). A resposta terá apenas uma confirmação local e o restante são alterações não confirmadas. @karim @giangVocê precisa correr
Para obter todas as alterações e, em seguida, você não receberá uma mensagem com "sua filial está à frente".
fonte
Vi casos em que o controle remoto ficou fora de sincronia e precisava ser atualizado. Se um
reset --hard
ou umbranch -D
não funcionar, tentefonte
reset --hard
obra nesta situaçãoreset --hard
deve funcionar aqui. No entanto, estou simplesmente apontando que ocasionalmente falha ao redefinir a ramificação corretamente e agit pull origin
sincroniza novamente o controle remoto e permitereset --hard
que funcione corretamente.Eu tive que fazer um:
como o git disse que não existe, porque foi limpo com o
fonte