28 Pregunta: Eliminar las confirmaciones de una sucursal en Git

pregunta creada en Wed, Sep 5, 2018 12:00 AM

Me gustaría saber cómo eliminar una confirmación.

Para delete, quiero decir que es como si no hubiera cometido ese compromiso, y cuando haga un impulso en el futuro, mis cambios no se enviarán a la rama remota.

Leí git help, y creo que el comando que debo usar es git reset --hard HEAD. ¿Esto es correcto?

    
2888
  1. Creo que esto no es ni un duplicado de Git deshacer último compromiso , ya que pregunta cómo eliminar cualquier compromiso de una rama. También creo que ninguna de las respuestas realmente aborda esta pregunta. Todos ellos rebobinan las últimas confirmaciones, no cherry-pick y delete una única confirmación que puede haber ocurrido hace un tiempo.
    2015-05-03 18: 06: 43Z
  2. @ Chris, la respuesta con git rebase -i HEAD~10 aborda la pregunta, ya que le permite elegir arbitrariamente los compromisos para eliminar. Git aplica las confirmaciones en el rango que usted especifica una por una, ignorando las confirmaciones que ha eliminado del registro. Utilicé este comando hoy para deshacerme del segundo y tercer compromiso más reciente de mi repo, manteniendo el primero. Estoy de acuerdo en que ninguna de las otras respuestas es satisfactoria.
    2015-06-17 21: 07: 46Z
  3. @ MST sí, debería haber dicho, ninguna de las opciones en la respuesta aceptada responde a esta pregunta, pero tiene toda la razón: ese comando parece funcionar
    2015-07-10 12: 43: 10Z
28 Respuestas                              28                         

Cuidado: git reset --hard BORRARÁ SUS CAMBIOS EN EL DIRECTORIO DE TRABAJO . Asegúrate de esconder cualquier cambio local que quieras mantener antes de ejecutar este comando.

Suponiendo que estás sentado en ese commit, entonces este comando lo desarmará ...

 
git reset --hard HEAD~1

El HEAD~1 significa la confirmación antes de la cabeza.

O, puede ver la salida de git log, encontrar el ID de confirmación del compromiso al que desea realizar una copia de seguridad y luego hacer esto:

 
git reset --hard <sha1-commit-id>

Si ya lo presionaste, necesitarás hacer un esfuerzo de fuerza para deshacerte de él ...

 
git push origin HEAD --force

Sin embargo , si otros lo han tirado, entonces sería mejor que empieces una nueva sucursal. Porque cuando lo jalen, simplemente lo integrará en su trabajo y lo volverá a subir.

Si ya presionó, puede ser mejor usar git revert, para crear un compromiso de "imagen espejo" que deshaga los cambios. Sin embargo, ambas confirmaciones estarán en el registro.


FYI - git reset --hard HEAD es genial si quieres deshacerte de WORK IN PROGRESS. Le restablecerá la confirmación más reciente y borrará todos los cambios en su árbol de trabajo e índice.


Por último, si necesita encontrar una confirmación que haya "eliminado", normalmente está presente en git reflog a menos que haya recolectado su depósito de basura.

    
3704
2016-02-02 07: 58: 31Z
  1. HEAD~1 o solo HEAD^. Si presionaste, deberías usar git revert en su lugar.
    2009-08-27 10: 45: 19Z
  2. Obviamente, también puede usar HEAD~n para "regresar" n confirmaciones de su cabeza. Tal vez desde este punto se puede interpretar ... --hard HEAD también como HEAD~0 = > borrando trabajos en progreso.
    2012-06-11 08: 05: 31Z
  3. @ beamrider9 imho git rebase es casi siempre la mejor manera de eliminar confirmaciones (como se describe en la respuesta de Greg Hewgill) - no solo porque rebase incluye una gran advertencia que estarás eliminando cosas 4realz.
    2012-10-26 06: 39: 57Z
  4. esto no elimina los cambios del árbol de confirmación. El OP solicitó un compromiso ya realizado. Si reset --hard, y comprueba el log --oneline --all, las confirmaciones permanecen en el árbol. ¿Cómo borramos estos compromisos del árbol? Gracias.
    2013-03-17 03: 09: 01Z
  5. usa reset --soft para eliminar la confirmación local SIN revertir el trabajo en curso.
    2013-09-24 00: 07: 42Z

Si aún no ha enviado la confirmación a ninguna parte, puede utilizar git rebase -i para eliminar que se comprometan Primero, averigüe qué tan lejos está ese compromiso (aproximadamente). Entonces haz:

 
git rebase -i HEAD~N

El ~N significa rebase las últimas N confirmaciones (N debe ser un número, por ejemplo, HEAD~10). Luego, puede editar el archivo que Git le presenta para eliminar el compromiso ofensivo. Al guardar ese archivo, Git volverá a escribir todas las siguientes confirmaciones como si la que eliminó no existiera.

El Git Book tiene una buena sección sobre el rebasado con fotos y ejemplos.

Sin embargo, ten cuidado con esto, porque si cambias algo que has empujado en otra parte, será necesario otro enfoque a menos que estés planeando hacer un empuje de fuerza.

    
652
2016-10-21 00: 51: 07Z
  1. Nota: Si tiene alguna fusión --no-ff en el último lote de confirmaciones, rebase los eliminará :( Esto se menciona bajo -p en esta página . El problema es, si Reemplace -i con -p, ya no obtendrá esa ventana emergente con las opciones para "editar este compromiso, sqush ese", etc. ¿Alguien sabe la solución?
    2013-04-21 00: 20: 25Z
  2. ¿Qué pasa si lo has presionado? (solo yo usando el repositorio remoto)
    2015-01-07 06: 02: 07Z
  3. @ Costa puede usar push -f para forzar el empuje y reemplazar la rama remota con la local. Si es solo tu propio repositorio remoto, no hay problema. El problema comienza si alguien más ha recuperado mientras tanto.
    2015-01-07 06: 16: 34Z
  4. Agregué y confirmé un archivo de datos que era demasiado grande para GitHub (sí, probablemente no debería estar en el repositorio de origen; bueno, sí). Cuando intenté empujar, GitHub se negó debido al archivo demasiado grande. Todo lo que quería hacer era deshacer este compromiso, a la vez que guardaba otros compromisos no relacionados que siguieron. El comando git rebase -i HEAD~5 era exactamente lo que necesitaba para eliminar completamente este compromiso de mi repositorio local. ¡Gracias!
    2015-02-24 18: 07: 20Z
  5. @ dumbledad: Con rebase -i, los cambios correspondientes a la confirmación eliminada no se conservan.
    2016-05-10 17: 43: 01Z

Otra posibilidad es uno de mis comandos favoritos personales:

 
git rebase -i <commit>~1

Esto iniciará la rebase en el modo interactivo -i en el punto justo antes de la confirmación que desea golpear. El editor empezará a enumerar todas las confirmaciones desde entonces. Elimine la línea que contiene la confirmación que desea borrar y guarde el archivo. Rebase hará el resto del trabajo, eliminando solo ese compromiso y reproduciendo todos los demás en el registro.

    
456
2009-08-27 03: 49: 27Z
  1. thx, por cierto si se encuentra con algún problema (como vacíoconfirma) puedes usar git rebase --continue
    2012-09-28 15: 43: 32Z
  2. Aún más fácil: git rebase -i HEAD~1
    2013-09-10 21: 12: 23Z
  3. Wowzers. git rebase -i HEAD~1 realmente limpió mucho el repositorio! Es difícil decir exactamente lo que hizo, pero todo se ve mucho mejor. Un poco alarmante, en realidad.
    2014-12-02 18: 02: 15Z
  4. Creo que vale la pena señalar que la confirmación no se elimina, simplemente se elimina de la lista. Si se equivoca, puede recuperar el compromiso usando reflog .
    2015-04-29 00: 11: 31Z
  5. ¿Está eliminando la línea lo mismo que d /drop?
    2016-05-25 18: 37: 19Z

Estoy agregando esta respuesta porque no veo por qué alguien que acaba de intentar realizar un trabajo querría eliminar todo ese trabajo debido a algún error al utilizar Git.

Si desea mantener su trabajo y simplemente 'deshacer' el comando de confirmación (que detectó antes de presionar para repo):

 
git reset --soft HEAD~1

No use la marca --hard a menos que desee destruir su trabajo en curso desde la última confirmación.

    
316
2012-10-15 18: 17: 58Z
  1. Este es un ejemplo de por qué: hace un pequeño trabajo en un servidor de desarrollo que compromete. Luego, resulta que ese servidor no tiene acceso HTTPS saliente, por lo que no puede empujar la confirmación en ningún lugar. Es más fácil simplemente fingir que nunca sucedió, y rehacer el parche desde su máquina local.
    2013-01-03 04: 32: 54Z
  2. reset --soft fue el salvador de la vida para no perder el trabajo actual.
    2013-12-31 16: 19: 18Z
  3. Gracias. Esta respuesta debe ser mejor clasificada o incluida en la respuesta aceptada. Eliminar un commit! = Revertir un commit.
    2014-03-05 13: 32: 09Z
  4. @ RandolphCarter: sin embargo, perderá todos los cambios no confirmados.
    2014-09-01 08: 18: 16Z
  5. @ Rob, un ejemplo es cuando confirma accidentalmente un archivo que contiene un secreto (por ejemplo, una contraseña) que nunca debe estar en control de código fuente. El compromiso local debe ser destruido , no solo deshecho, por lo que nunca se enviará al servidor.
    2016-11-15 15: 51: 38Z

Eliminando un compromiso completo

 
git rebase -p --onto SHA^ SHA

Obviamente, reemplace "SHA" con la referencia de la que desea deshacerse. El "^" en ese comando es literal.

http://sethrobertson.github.io/GitFixUm/fixup.html

    
76
2015-08-31 19: 36: 46Z
  1. ¿Cómo puedo votar más esta respuesta? las otras soluciones solo muestran cómo hacerlo de forma interactiva o eliminar los principales compromisos.
    2018-01-12 16: 24: 22Z
  2. ¡Gracias por este enlace! Me preguntaba, después de ejecutar esto, ¿por qué sigo viendo la confirmación SHA en migit reflog?
    2018-02-15 11: 03: 57Z
  3. -p, --preserve-merges Volver a crear confirmaciones de combinación en lugar de aplanar el historial al repetir la repetición de una introducción de confirmación de fusión. Las soluciones de fusión de conflictos o las enmiendas manuales para fusionar confirmaciones no se conservan.
    2018-06-27 18: 31: 20Z
  4. Esta es la respuesta exacta real
    2019-03-13 17: 15: 49Z
  5. Dice, "reemplaza SHA con la referencia de la que quieres deshacerte", pero la línea tiene SHA dos veces. Aquí esta lo que hice. git rebase -p --onto 5ca8832c120 ^ 5ca8832c120 Pero nada cambió. ¿Se supone que debo usar el mismo SHA dos veces? Si no, ¿cuál es el SHA para que se elimine el compromiso y qué se supone que es el otro SHA?
    2019-05-14 22: 34: 20Z

Si no publicó los cambios, para eliminar la confirmación más reciente, puede hacerlo

 
$ git reset --hard HEAD^

(tenga en cuenta que esto también eliminaría todos los cambios no confirmados; use con cuidado).

Si ya ha publicado la confirmación de borrado, use git revert

 
$ git revert HEAD
    
51
2009-08-27 10: 47: 42Z
  1. Eso no funcionó. Cuando git log, todo sigue ahí, no importa por qué lo hago, solo agrega más confirmaciones. Quiero limpiar la historia.
    2014-05-09 14: 42: 57Z
  2. @ Costa: ¿Qué no funcionó (es decir, qué versión usaste) y cómo git log?
    2014-05-09 14: 44: 54Z
  3. He intentado casi todo en este Q &amp A. (Probé git revert HEAD, más recientemente) Mi registro de git: tree = log --all --graph --format=format:'%C(bold blue)%h%C(reset) %C(dim black)%s%C(reset)%C(bold red)%d%C(reset) %C(green)by %an, %ar%C(reset)'
    2014-05-09 14: 46: 25Z
  4. Solo quiero eliminar las confirmaciones (como si nunca hubieran existido). Me lancé a una aventura de codificación extraña, con varias confirmaciones nuevas, y todo terminó siendo basura. ¿Cómo puedo borrar esos archivos de mi registro de git?
    2014-05-09 14: 55: 46Z
  5. Holy crap something magically hizo exactamente lo que quería ... ¿cuál de esos comandos lo hizo? !!?!
    2014-05-09 14: 57: 52Z
 
git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId hace referencia al que desea volver a

    
35
2017-08-12 10: 13: 42Z
  1. git push --force < origin > < branchName &gt ;. como sin mencionar el nombre de la rama, puede cambiar todos los archivos en el control remoto.
    2016-06-22 06: 46: 05Z

Forzar el historial de cambios

Suponiendo que no solo desea eliminar la última confirmación, sino que desea eliminar las confirmaciones específicas de las últimas n confirmaciones, vaya con:

git rebase -i HEAD~<number of commits to go back>, por lo tanto, git rebase -i HEAD~5 si desea ver los últimos cinco confirmaciones.

Luego, en el editor de texto, cambie la palabra pick a drop al lado de cada confirmación que desee eliminar. Guarde y salga del editor. Voila!

Historial de cambios adicional

prueba git revert <commit hash>. Revertir creará un nuevo compromiso que deshace la confirmación especificada.

    
31
2018-04-27 06: 06: 50Z
  1. drop la palabra clave no está definida. Para eliminar una confirmación, simplemente elimine toda la línea.
    2018-12-17 22: 40: 40Z
  2. drop funcionó para mí
    2019-02-15 05: 52: 37Z
  3. Para mí, drop se definió como una palabra clave, pero hacer una drop no parece eliminar la confirmación del historial. Sin embargo, eliminando la línea de la rebase interactiva.
    2019-04-23 16: 03: 35Z

Si desea arreglar su última confirmación, puede deshacer la confirmación y desempaquetar los archivos que contiene:

 
git reset HEAD~1

Esto devolverá su repositorio a su estado antes de que git agregue comandos que prepararon los archivos. Sus cambios estarán en su directorio de trabajo. HEAD ~ 1 se refiere a la confirmación debajo de la punta actual de la rama.

Si desea confirmar la confirmación de N, pero mantenga los cambios de código en su directorio de trabajo:

 
git reset HEAD~N

Si desea deshacerse de su último compromiso y no desea mantener los cambios de código, puede hacer un restablecimiento "difícil".

 
git reset --hard HEAD~1

Del mismo modo, si desea descartar las últimas N confirmaciones y no desea mantener los cambios de código:

 
git reset --hard HEAD~N
    
29
2014-05-31 07: 19: 37Z

Supongamos que queremos eliminar los commit 2 & 4 del repositorio.

 
commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>

Nota: Debe tener derechos de administrador sobre el repositorio ya que está usando --hard y -f.

  •  git checkout b3d92c5 Checkout el último commit utilizable.
  •  git checkout -b repair Crear una nueva rama para trabajar.
  •  git cherry-pick 77b9b82 Ejecutar a través de la confirmación 3.
  •  git cherry-pick 2c6a45b Ejecutar a través de la confirmación 1.
  •  git checkout master Maestro de pago.
  •  git reset --hard b3d92c5 Restablecer el master al último commit utilizable.
  •  git merge repair Combina nuestra nueva rama en el maestro.
  •  git push -f origin master Empuje el maestro al repositorio remoto.
28
2018-03-19 04: 02: 24Z
  1. el último paso debe ser git push -f origin master, no hay opción --hard
    2018-01-15 04: 55: 31Z
  2. Supongo que commit 0 es anterior a commit 1. Por favor, ¿podría decirme por qué primero corre a través de commit 3 (por cherry pick) y luego por commit 1? Después de pagar b3d92cd (commit 0) esperaría commit 1, luego commit 3. Gracias.
    2018-11-05 11: 51: 41Z
  3. @ JarekC Creo que la confirmación más alta es la confirmación más reciente aquí, a menos que esté viendo algo mal ...
    2019-01-22 15: 06: 11Z
 
git rebase -i HEAD~2

Aquí '2' es el número de confirmaciones que desea reajustar.

 
'git rebase -i HEAD`

si desea volver a clasificar todas las confirmaciones.

Entonces podrás elegir una de estas opciones.

p, pick = use commit

r, reword = use commit, but edit the commit message

e, edit = use commit, but stop for amending

s, squash = use commit, but meld into previous commit

f, fixup = like "squash", but discard this commit's log message

x, exec = run command (the rest of the line) using shell

d, drop = remove commit

Estas líneas pueden ser reordenadas; Se ejecutan de arriba a abajo.  Si elimina una línea aquí, ese compromiso se perderá.  Sin embargo, si eliminas todo, la rebase será abortada.  Tenga en cuenta que las confirmaciones vacías están comentadas

Simplemente puedes eliminar ese compromiso con la opción "d" o Eliminar una línea que tenga tu compromiso.

    
18
2016-05-18 23: 39: 53Z
  1. En la última versión de git no hay más opciones d . Solo necesita eliminar las líneas con confirmaciones de rebase para eliminarlas.
    2018-01-18 08: 56: 58Z

Para eliminar en una sucursal local, use

 
git reset --hard HEAD~1

Para eliminar en una rama remota, use

 
git push origin HEAD --force
    
15
2014-08-28 16: 06: 07Z

Aquí hay otra forma de hacer esto:

Compruebe la sucursal que desea revertir, luego restablezca su copia de trabajo local para volver a la confirmación de que desea ser la última en el servidor remoto (todo lo que suceda después se irá adiós). Para hacer esto, en SourceTree, hice clic derecho en y seleccioné "Restablecer BRANCHNAME para este compromiso". Creo que la línea de comando es:

 
git reset --hard COMMIT_ID

Como acaba de retirar su sucursal desde el control remoto, no va a tener ningún cambio local para preocuparse por perder. Pero esto los perdería si lo hicieras.

Luego navegue hasta el directorio local de su repositorio y ejecute este comando:

 
git -c diff.mnemonicprefix=false -c core.quotepath=false \
push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

Esto borrará todas las confirmaciones después de la actual en tu repositorio local, pero solo para esa rama.

    
9
2014-05-14 06: 47: 06Z

El error:

I git rebase -i --root 'edí mi rama, pensando ignorantemente que podía cambiar la primera confirmación diferente del maestro (la vista predeterminada de GitHub para Windows es la comparación con el maestro, ocultando su totalidad).

Crecí una barba de Silicon Valley, mientras que más de 900 compromisos se cargaron en Sublime. Saliendo sin cambios, cargué mi batería y luego procedí a afeitarme, ya que todos los más de 900 individuos se rebasaron de forma despreocupada, restableciendo sus tiempos de confirmación hasta ahora.

Decidido a vencer a Git y preservar los tiempos originales, eliminé este repositorio local y lo re-cloné desde el control remoto.

Ahora se ha vuelto a agregar un compromiso innecesario más reciente al maestro que deseaba eliminar, por lo que procedió de esta manera.

Agotando las opciones:

No deseaba el git revert, crearía un commit adicional, dándole la ventaja a Git.

El git reset --hard HEAD no hizo nada, después de verificar el reflog, el último y solo el HEAD fue el clon: Git gana.

Para obtener el SHA más reciente, verifiqué el repositorio remoto en github.com - victoria menor.

Después de pensar que git reset --hard <SHA> había funcionado, actualicé otra rama para dominar y 1 ... 2 ... ¡puf! el compromiso estaba de vuelta - Git gana.

Comprobando de nuevo al maestro, es hora de probar git rebase -i <SHA>, luego retire la línea ... en vano, lamento decirlo. " Si elimina una línea aquí, ese compromiso se perderá ". Ah ... pasado por alto la nueva función arrastre el n00b en 2.8.3 notas de publicación .

La solución:

git rebase -i <SHA> luego d, drop = remove commit.

Para verificar, verifiqué en otra sucursal, y listo - no se oculta el compromiso de obtener /extraer del maestro.

https://twitter.com/holman/status/706006896273063936

Buen día para ti.

    
9
2016-05-25 20: 54: 19Z

Todos los comandos anteriores restauran el estado de su árbol de trabajo y el índice como estaban antes de realizar la confirmación, pero no restauran el estado del repositorio. Si lo miras, la confirmación "eliminada" no se elimina realmente, simplemente no es la que está en la punta de la rama actual.

Creo que no hay medios para eliminar una confirmación con comandos de porcelana . La única forma es eliminarlo del registro y volver a iniciar sesión y luego ejecutar un git prune --expire -now.

8
2012-10-31 04: 31: 08Z
  1. El orden en que se muestran las respuestas en StackOverflow no es fijo. Por favor, no consulte "Todos los comandos anteriores". Haga su propia respuesta autocontenida.
    2014-01-16 12: 56: 09Z
  2. Esta respuesta no es del todo correcta. git prune es en realidad uno de los comandos de "porcelana" . Además, es raro que desees borrar completamente tu reflog (un caso de uso es eliminar información confidencial de tu repositorio, pero como dije, es un caso de uso raro). En la mayoría de los casos, querrá mantener los registros antiguos en el reflog, en caso de que necesite recuperar datos. Consulte Pro Git: 9.7 Git Internals - Mantenimiento y recuperación de datos .
    2014-05-14 07: 12: 36Z

Si acabas de arruinar tu última confirmación (mensaje incorrecto, olvidaste agregar algunos cambios) y quieres solucionarlo antes de enviarlo a un repositorio público, ¿por qué no usarlo?

 
git commit --amend -m "New message here"

Si ha realizado cambios por etapas recientemente, se combinarán con el último compromiso (del que está intentando deshacerse) y reemplazarán ese compromiso.

Por supuesto, si modifica un compromiso después de haberlo empujado, está reescribiendo el historial, por lo que, si lo hace, asegúrese de comprender las implicaciones.

También puedes pasar la opción '--no-editar' en lugar de '-m' si prefieres usar el mensaje de confirmación anterior.

Docs: http://git-scm.com/docs/git-commit.html

    
7
2014-05-26 23: 24: 22Z
  1. Eso no es lo que OP está solicitando.
    2015-12-01 02: 58: 08Z

Si desea mantener el historial, mostrando la confirmación y la reversión, debe usar:

 
git revert GIT_COMMIT_HASH

ingrese el mensaje que explica por qué está revertiendo y luego:

 
git push  

Cuando emita git log verá los mensajes de registro de confirmación y reversión "incorrectos".

    
7
2015-01-07 15: 13: 35Z
  1. Sí, pero el OP estaba claro que eso no es lo que quieren.
    2015-12-01 02: 57: 00Z

Si ya presionó, primero encuentre la confirmación que desea que esté en HEAD ($GIT_COMMIT_HASH_HERE) , luego ejecute el comandosiguiente:

 
git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

Luego, cada lugar en el que se haya clonado el repositorio, ejecute:

 
git reset --hard origin/master
    
5
2017-01-30 00: 31: 00Z

Lo que hago normalmente cuando me comprometo y presiono (si alguien lo presionó, esto resuelve el problema):

 
git reset --hard HEAD~1

git push -f origin

espero esta ayuda

    
5
2017-06-14 09: 22: 56Z

Restablecer en rama local

 
git reset --hard HEAD~<Number of commit> So git reset --hard HEAD~3

Fuerza de empuje hacia el origen

 
git push -f origin
    
4
2018-05-29 07: 38: 04Z

Lleve la copia de seguridad de su código a la carpeta temporal. El siguiente comando se restablecerá igual que el servidor.

 
git reset --hard HEAD
git clean -f
git pull

Si desea mantener sus cambios y eliminar las confirmaciones recientes

 
git reset --soft HEAD^
git pull
    
3
2018-07-20 05: 14: 18Z

Ya he empujado. Necesito devolver algunas confirmaciones de forma remota. He probado muchas variaciones, pero solo esto de Justin via git bush funciona bien para mí:

 
git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force
    
2
2019-02-08 21: 29: 18Z

git reset --hard

origen de empuje de git HEAD --force

Si una o más de las confirmaciones están etiquetadas, elimine la (s) etiqueta (s) primero. De lo contrario, la confirmación etiquetada no se eliminará.

    
1
2015-07-24 14: 45: 51Z

 eliminar el compromiso local

Como se puede ver en la imagen anterior, quiero borrar la confirmación "cambio de prueba 2" revertir (SHA1 ID: 015b5220c50e3dfbb1063f23789d92ae1d3481a2 (puede obtener la SHA1 ID usando el comando gitk en git bash)).

Para eso puedo usar (todos los comandos de abajo solo funcionan en local. Necesitas presionar después de eliminar):

  1.  git reset --hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2 //le hace una copia de seguridad de ese compromiso (SHA1 ID de cambio de prueba 4 commit es 515b5220c50e3dfbb1063f23789d92ae1d3481a2 )
  2.  git reset --hard HEAD~1 //le hace una copia de seguridad antes de un compromiso.
  3.  git reset --hard HEAD^ //Para eliminar el último commit de git

después de eliminar:

 después de borrar commit

    
1
2018-07-03 06: 51: 42Z
 
// display git commit log    
$ git log --pretty=oneline --abbrev-commit

// show last two commit and open in your default editor
// then delete second commit line and save it
$ git rebase -i HEAD~2

Referencia: Cómo eliminar un commit en git, local y remoto

    
0
2019-06-26 12: 46: 32Z

Suponiendo que no hayas enviado al repositorio remoto, podrías volver a clonar el repositorio. Este ha sido mi método de elección varias veces.

    
- 1
2014-12-31 06: 54: 56Z
  1. Obviamente, se envía al repositorio en función del OP.
    2016-04-16 02: 18: 30Z
  2. @ LucasHuang No, no es así: "cuando hago un impulso en el futuro , mis cambios no se enviarán a la rama remota"
    2016-12-08 21: 02: 16Z
fuente colocada aquí