Eliminar una confirmación entre otras confirmaciones

Tengo un local y su correspondiente repository de github. Tengo algunos compromisos como

A <- B <- C <- D 

Un ser el último.

Esta es la situación en ambos repositorys. Quiero eliminar commit C como si nunca hubiera sucedido.

Entonces debería ser como en el git log

 A <- B <- D 

en ambos repos.

Intenté git reset --soft <sha-commit-C> y ahora estoy atascado. No puedo ver A, B Antes de seguir adelante, quiero estar completamente seguro de que sé lo que estoy haciendo.

git reflog me da:

 git reflog 73ea54d HEAD@{0}: reset: moving to 73ea54d8 a594699 HEAD@{1}: rebase -i (finish): returning to refs/heads/unique_ptr_release a594699 HEAD@{2}: checkout: moving from unique_ptr_release to a594699fb6f7d85bc8 a594699 HEAD@{3}: checkout: moving from unique_ptr_release to unique_ptr_release a594699 HEAD@{4}: commit (merge): Merge branch 'master' into unique_ptr_release 

HEAD@{4} es lo que mi Head estaba antes de reset --soft command.

¿Cómo salgo de esta situación?

Git-rebase es lo que estás buscando.

en su caso de cometer ABCD , y quiere eliminar C, intente:

 git rebase -i HEAD~3 

mostrará los últimos 3 commits a través de editor (mine is vim), simplemente elimine (en vim: dd ) la línea de commit que desea eliminar, luego :wq (en vim :wq ).

Hecho, mira el git log y verás que la confirmación C se elimina.

* no olvide hacer una copy de security de su código o carpeta .git.

  1. Asegúrese de hacer una copy de security de su carpeta .git.
  2. Asegúrese de confirmar D, no confíe en los cambios realizados en C.
  3. git rebase –onto DB ~ 1 (como A es el último commit)