Como faço para redefinir um branch git para um commit anterior e consertar o HEAD separado?

2

Eu precisei redefinir minha ramificação para um estado de funcionamento anterior (commit), então fiz:

git reset --hard c70e611

Agora vejo

HEAD detached at c70e611
nothing to commit, working directory clean

Como corrigir / entender / contornar a mensagem de cabeça desanexada e empurrar para que c70e611 seja agora a última confirmação que estou usando e represente o CABEÇA da ramificação em que estou trabalhando (não mestre).

    
por Michael Durrant 14.12.2015 / 15:43

2 respostas

1

HEAD detached at c70e611

Isso porque, quando você fez o git reset --hard , não estava em nenhuma ramificação naquele momento. Você tinha um HEAD desanexado e essa cabeça desanexada foi movida com o comando git reset --hard , junto com uma reconfiguração de sua árvore de trabalho para esse estado.

Se você quiser que algum ramo foo seja c70611 , então:

git checkout foo
git reset --hard c70611

Se isso for considerado um bom estado para empurrar para o foo do upstream, apenas git push <remote-name> foo .

Existe uma maneira mais direta de forçar foo a c70611 sem verificar se ela é a ramificação atual. Ou seja, você pode reescrever o que foo aponta para usar o comando git update-ref .

Antes de fazer qualquer um dos itens acima, eu faria uma pausa e tentaria ver como eu acabara em um estado distante, sem perceber. Talvez tenha sido um rebase inacabado ou qualquer outra coisa. O primeiro passo é revisar as últimas entradas no git reflog para ajudar a refrescar sua memória.

    
por 15.12.2015 / 01:48
5

HEAD é onde sua área de trabalho está atualmente na árvore de git commits; detached significa que não corresponde a um ramo. Para corrigir isso, você deve criar uma nova ramificação com git checkout -b branch (substituindo branch pelo nome que deseja dar à nova ramificação).

Se você quiser eliminar as confirmações após a que redefiniu, exclua a ramificação principal e recrie-a:

git branch -D master
git checkout -b master

Se você está trabalhando em um repositório que é colocado em outro lugar, você precisará fazer mais trabalho para consertar as coisas, possivelmente forçando um push (e dizendo a cada um para clonar novamente seu espaço de trabalho). Se você compartilhou o estado, você deve realmente criar um commit de reverter; dê uma olhada em git revert (iniciando em master e revertendo todos os commits começando com o seguinte c70e611 ).

    
por 14.12.2015 / 16:10

Tags