Qual é a maneira mais simples de desfazer um commit específico que é:
- não na cabeça ou na CABEÇA
- Foi enviado para o controle remoto.
Porque se não for o último commit,
git reset HEAD
não funciona E porque foi enviado para um controle remoto,
git rebase -i
e
git rebase --onto
causará algum problema nos controles remotos.
Mais ainda, não quero modificar a história de verdade. Se havia um código incorreto, ele estava presente na história e pode ser visto. Eu só quero isso na cópia de trabalho e não me importo com um commit de mesclagem reversa.
Em outras palavras, qual é o equivalente do Git dos seguintes comandos svn:
svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
que remove todas as alterações de 295 para 302, mesclando inversamente todas as alterações nessas revisões, como um novo commit.
svn merge -c -302 ^/trunk
que desfaz a confirmação 302, é claro, adicionando outra confirmação que mescla inversamente as alterações dessa respectiva confirmação.
Eu pensei que deveria ser uma operação bastante simples no Git e um caso de uso bastante comum. Qual é o sentido dos commits atômicos?
Temos encenar stashing e tudo para garantir os commits são perfeitamente atômica, você não deveria ser capaz de desfazer um ou mais desses commits atômicas facilmente?