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?
fonte
Eu não gosto do auto-commit que
git revert
faz, então isso pode ser útil para alguns.Se você quiser apenas os arquivos modificados e não a confirmação automática , poderá usar
--no-commit
que é igual ao
-n
fonte
git reset HEAD~1 --soft
se você já reverteu sem-n
git reset HEAD~n
não resolverá desfazer nenhum commit que não possa ser acessado continuamente da cabeça. A consulta é para reverter qualquer confirmação específica.git revert --continue
o que me instruiu. Funcionou, mas infelizmente comprometeu os resultados. Talvez eu precisasse fazergit revert --no-commit --continue
.git revert
, se você esqueceu o-n
; porque nesse ponto a última confirmação é a reversão, portanto, a reinicialização suave desfaz essa confirmação, mas não as alterações de código associadas da reversãoComo ele já foi enviado, você não deve manipular diretamente a história.
git revert
reverterá alterações específicas de uma confirmação usando uma nova confirmação, para não manipular o histórico da confirmação.fonte
Se o commit que você deseja reverter for um commit mesclado (já foi mesclado), você deve escolher uma opção
-m 1
ou-m 2
como mostrado abaixo. Isso permitirá ao git saber qual commit pai do commit mesclado usar. Mais detalhes podem ser encontrados AQUI .git revert <commit> -m 1
git revert <commit> -m 2
fonte