Qual é o significado do git reset --hard origin / master?

224

Fiz um git pulle recebi um erro:

Os seguintes arquivos da árvore de trabalho seriam substituídos por mesclagem ... Mova ou remova-os antes de mesclar.

Para resolver isso, fiz o seguinte:

git fetch
git reset --hard origin/master

Agora, quando eu faço git pull, ele diz tudo atualizado. Quero saber o que exatamente acontece quando executo esses comandos. Eu sei que git fetchbusca as alterações do repositório remoto sem mesclá-las ao meu repositório local.

Qual é o significado de git reset --hard origin/master? Como funciona?

Raza
fonte

Respostas:

414
git reset --hard origin/master

diz: jogue fora todas as minhas alterações em etapas e em etapas, esqueça tudo no meu ramo local atual e faça exatamente o mesmo que origin/master.

Você provavelmente queria perguntar isso antes de executar o comando. A natureza destrutiva é sugerida usando as mesmas palavras que em "hard reset".

CB Bailey
fonte
9
Você pode desfazer essa movimentação usando git reset --hard HEAD@{1}. HEAD@{1}varia de situação para situação, por isso é aconselhável procurá-lo git reflog.
Nils Werner
2
Observe que o método do @ NilsWerner para desfazer a movimentação não restaura as alterações em etapas e em etapas. Aqueles se foram para sempre.
Michael Anderson
3
Os arquivos em etapas ainda podem ser encontrados git fsck --lost-found, mas não serão anexados ao caminho do arquivo original e podem ser difíceis de classificar.
CB Bailey
1
Geralmente, é útil redefinir a ramificação principal local como origem / mestre quando você (talvez acidentalmente) efetuou alterações no mestre local em vez de em uma ramificação local. Basta criar uma ramificação local para as confirmações mais recentes e redefinir o mestre local para origem / mestre. Em seguida, você pode mesclar ou refazer sua ramificação do mestre, conforme necessário.
Mike Hopper
2
lol "sugerido" é uma ótima maneira de descrever isso, pois está longe de ser óbvia ou explícita
Ben Sandeen