Magit - Desfazer último commit - Manipulação do Histórico

12

Esta questão do StackOverflow tem as melhores soluções / abordagens para desfazer as últimas confirmações.

Comecei a usar o Magit há algumas semanas e, depois de examinar toda a documentação, ainda não tenho uma maneira definitiva / melhor de desfazer uma alteração cometida por engano.

Por exemplo:
Para desfazer e refazer o último commit, podemos usar:

$ git commit -m "Something terribly misguided"
$ git reset HEAD~
<< edit files as necessary >>
$ git add ... 
$ git commit -c ORIG_HEAD # To keep the same commit message

Qual deve ser o melhor fluxo de trabalho para reproduzir este procedimento usando o Magit ?

Alexandro de Oliveira
fonte

Respostas:

17

Você pode usar magit-reset(vinculado por padrão a x). O commit no ponto será usado como padrão para o prompt, mas você pode inserir qualquer valor de revisão que desejar ("HEAD ~" aqui).

Os comandos de redefinição estão descritos na seção "Redefinição" do manual: https://magit.vc/manual/magit/Resetting.html

Para reutilizar a mensagem de confirmação, você pode usar a =Copção no pop-up de confirmação. Sem aviso prévio, o prompt atualmente não oferece nenhum valor de conclusão (acho que provavelmente deveria oferecer pelo menos ORIG_HEAD), mas antes de redefinir, você pode colocar o hash do commit atual no anel de morte (por exemplo, C-wna linha "Head:" do buffer de status) e, depois de redefinir, puxe-o como o valor da =Copção.


Alguns comentários adicionais:

  • Em vez de usar =C, você pode achar mais conveniente iniciar o commit ( cc) e depois usar git-commit-prev-message ( M-p) para percorrer as mensagens anteriores.

  • Se você estiver apenas modificando o último commit, poderá aderir às mudanças faseadas no commit anterior com magit-commit-amend ( ca) ou magit-commit-extend( ce). (O último reutiliza a mensagem de confirmação, ignorando o buffer COMMIT_EDITMSG.)

Kyle Meyer
fonte