Pregunta

Me gustaría saber cómo eliminar un commit.

Por delete, Quiero decir que es como si yo no tenía que cometer, y cuando hago un empuje en el futuro, mis cambios no se envían a la sucursal remota.

He leído git ayuda, y creo que el comando debo utilizar es git reset --hard HEAD.Es esto correcto?

¿Fue útil?

Solución

Atención: git reset --hard eliminará sus cambios de directorio DE TRABAJO . Asegúrese de esconder cualquier cambio local que desea mantener antes de ejecutar este comando.

Si se asume que usted está sentado en esa confirmar y seleccione este comando Wack que ...

git reset --hard HEAD~1

El HEAD~1 significa el commit antes de la cabeza.

O, usted podría mirar a la salida de git log, encontrar el ID de cometer el comprometerse desea realizar una copia de hasta, y luego hacer esto:

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

Si ya lo empujó, tendrá que hacer un esfuerzo fuerza para deshacerse de él ...

git push origin HEAD --force

Sin embargo , si otros pueden haber tiró de él, entonces sería mejor comenzar una nueva rama. Porque cuando se ponen, se acaba de fusionar en su trabajo, y lo obtendrá empujado hacia atrás de nuevo.

Si ya empujado, puede ser mejor usar git revert, para crear una "imagen especular" comprometerse que deshacer los cambios. Sin embargo, ambas confirmaciones serán en el registro.


FYI - git reset --hard HEAD es grande si usted quiere deshacerse de trabajos en curso. Se restablecerá de nuevo a la más reciente cometer, y borrará todos los cambios en su árbol de trabajo y el índice.


Por último, si usted necesita encontrar una confirmación de que "eliminado", es típicamente presentes en git reflog a menos que haya basura recogida su repositorio.

Otros consejos

Si todavía no ha presionado el envío de datos en cualquier lugar, puede utilizar git rebase -i para eliminar esa confirmación. En primer lugar, averiguar a qué distancia que cometen es (aproximadamente). A continuación, hacer:

git rebase -i HEAD~N

El ~N significa rebase el último N comete (N debe ser un número, por ejemplo HEAD~10). A continuación, puede editar el archivo que presenta Git para que borre el infractor cometió. Al guardar el archivo, Git se vuelva a grabar todas las realizan los siguientes como si el que ha borrado no existiera.

El libro Git tiene una buena sección sobre rebase con imágenes y ejemplos.

Tenga cuidado con esto, porque si se cambia algo que Tienes empujado otra parte, será necesario otro enfoque a menos que usted está planeando hacer un empuje de fuerza.

Otra posibilidad es uno de mis favoritos personales comandos:

git rebase -i <commit>~1

Esto iniciará el rebase en -i modo interactivo en el punto justo antes de confirmar que desea para golpear. El editor se iniciará lista de todos los compromete desde entonces. Eliminar la línea que contiene el envío de datos que desea borrar y guardar el archivo. Rebase hará el resto del trabajo, eliminando únicamente que cometió, y reproducir todos los demás de nuevo en el registro.

Estoy añadiendo esta respuesta porque no veo por qué alguien que sólo ha intentado cometer el trabajo querría eliminar todo ese trabajo debido a algún error usando Git!

Si desea mantener su trabajo y sólo 'deshacer' que cometen comando (usted cogió antes de empujar a la cesión temporal):

git reset --soft HEAD~1

No utilice el bandera --hard a menos que desee destruir su trabajo en progreso desde la última confirmación.

Extracción de una entera cometer

git rebase -p --onto SHA^ SHA

Obviamente reemplazar "SHA" con la referencia que desea eliminar. El "^" en ese comando es literal.

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

Si no publicar los cambios, para eliminar la última confirmación, que puede hacer

$ git reset --hard HEAD^

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

Si ya publicados a-ser-commmit eliminado, utilice git revertir

$ git revert HEAD
git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId refiere el cual desea volver a

Supongamos que queremos eliminar confirmaciones 2 y 4 de la cesión temporal.

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

Nota: Es necesario tener derechos de administrador sobre el repositorio dado que está utilizando --hard y -f

.
  • git checkout b3d92c5 Pedido el último utilizable cometió.
  • git checkout -b repair Crear una nueva rama a trabajar.
  • git cherry-pick 77b9b82 ejecutan a través de cometer 3.
  • git cherry-pick 2c6a45b ejecutan a través de comprometerse 1.
  • git checkout master Pedido maestro.
  • git reset --hard b3d92c5 Reinicio general a última confirmación utilizable.
  • git merge repair Combinar nuestra nueva sucursal en maestro.
  • git push -f origin master empuje principal al repositorio remoto.

Con fuerza historial de cambios

Suponiendo que no sólo desea eliminar la última confirmación, pero que desea eliminar compromete específicas de las últimas n confirmaciones, ir con:

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

A continuación, en el editor de texto cambiar la palabra pick a drop junto a cada commit que desea eliminar. Guarde y salga del editor. Voila!

aditiva historial de cambios

Trate git revert <commit hash>. Revert creará un nueva commit que deshace la confirmación especificada.

Si desea arreglar su última confirmación, puede deshacer la confirmación, y unstage los archivos en él, haciendo:

git reset HEAD~1

Esto devolverá su repositorio a su estado antes de que el git add comandos que protagonizaron los archivos. Los cambios estarán en el directorio de trabajo. CABEZA ~ 1 se refiere a la cometer debajo de la punta actual de la rama.

Si desea uncommit N compromete, pero mantener los cambios de código en su directorio de trabajo:

git reset HEAD~N

Si desea deshacerse de su última comprometerse, y no desea mantener los cambios en el código, se puede hacer un reset "duro".

git reset --hard HEAD~1

Del mismo modo, si desea descartar la última N compromete, y no quieren mantener los cambios de código:

git reset --hard HEAD~N
git rebase -i HEAD~2

A continuación, '2' es el número de confirmaciones que desea reajustar.

'git rebase -i HEAD`

Si desea reajustar todos los confirmaciones.

A continuación, usted será capaz de 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 se quita una línea aquí que cometen se perderán.  Sin embargo, si se quita todo, se abortará el rebase.  Tenga en cuenta que compromete vacías están comentadas

Usted puede simplemente eliminar los que asignan utilizando la opción "d" o eliminación de una línea que tiene su confirmación.

Para eliminar en rama local, utilice

git reset --hard HEAD~1

Para eliminar en una rama remota, utilice

git push origin HEAD --force

Aquí hay otra manera de hacer esto:

Pedido de la rama que desea revertir, a continuación, restablezca su copia de trabajo local a la que desea comprometerse a ser el último de ellos en el servidor remoto (después de todo lo que va a ir adiós). Para ello, en SourceTree que haga clic en el seleccionado y "Reset BRANCHNAME a este compromiso". Creo que la línea de comandos es:

git reset --hard COMMIT_ID

Ya que acaba de comprobar a cabo su sucursal de distancia, usted no va a tener cualquier cambio local que preocuparse de perder. Pero esto sería perderlos si lo hizo.

A continuación, vaya al directorio local de su repositorio y ejecutar este comando:

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

Esto borrará todos los envíos después de la actual en su repositorio local, pero sólo para que una rama.

El error:

Yo git rebase -i --root'ed mi rama, ignorante pensando que podría reformular la primera cometer diferentes del maestro (el GitHub para Windows la vista predeterminada es la comparación de dominar, ocultando su totalidad).

Me creció un Silicon Valley de la barba, mientras que 900+ comete cargan a sí mismos en Sublime.Salir sin cambios, me cobran a mi la batería, a continuación, se procedió a afeitarse, como todos los 900+ individuo se compromete con indiferencia reajustado - restablecer sus cometer los tiempos de ahora.

Decidido a vencer a Git y conservar el original de veces, he borrado este repositorio local y re-clonado a partir de la distancia.

Ahora se ha re-se ha añadido una más reciente innecesarios comprometerse a maestro deseaba quitar, por lo que procedió así.

Agotar las opciones:

Yo no deseo git revert - se crearía un adicional de cometer, dando Git la parte superior de la mano.

git reset --hard HEAD no hizo nada, después de comprobar la reflog, la última y única HEAD era el clon - Git gana.

Para obtener la más reciente SHA, he comprobado el repositorio remoto en github.com - menores de ganar.

Después de pensar git reset --hard <SHA> había trabajado, he actualizado otra rama master y 1...2...puf!la confirmación fue de nuevo - Git gana.

La comprobación de vuelta al maestro, el tiempo para tratar git rebase -i <SHA>, y , luego, retire la línea de...en vano, es triste decirlo."Si elimina una línea de aquí QUE COMETEN SERÁ PERDIDO".Ah...glosado nueva característica troll de la n00b en el 2.8.3 notas de la versión.

La solución:

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

Para verificar, llegué a otra rama, y listo, no esconderse comprometerse a fetch/extracción de la maestra.

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

Buen día para usted.

Todos los comandos anteriores restaurar el estado de su árbol de trabajo y el índice como estaban antes de hacer la confirmación, pero no restauran el estado del repositorio. Si nos fijamos en él, el "borrar" comprometerse en realidad no es eliminado, simplemente no es el que está en la punta de la rama actual.

Creo que no hay medios para eliminar una confirmación con . La única manera es para quitarlo del registro y reflog y luego ejecutar un git prune --expire -now.

Fuente: https://gist.github.com/sagarjethi/c07723b2f4fa74ad8bdf229166cf79d8

Eliminar de la última confirmación

Por ejemplo, su última confirmación

origen git push + aa61ab32 ^: master

Ahora que quiere eliminar esta confirmación a continuación, una manera fácil de hacer esto después

Pasos

  1. En primer lugar restablecer la rama a la matriz de la corriente cometer

  2. Fuerza empujar al mando a distancia.

git reset HEAD^ --hard

git push origin -f

En particular, se comprometen, desea restablecer está siguiendo

git reset bb676878^ --hard

git push origin -f

Si sólo en mal estado de su última confirmación (mensaje equivocado, se olvidó de añadir algunos cambios) y quiere solucionarlo antes de empujarlo a un acuerdo de recompra pública por qué no usar:

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

Si recientemente han llevado a cabo los cambios que va a ser combinada con la última confirmación (que usted está tratando de deshacerse de) y reemplazará esa confirmación.

Por supuesto, si usted enmienda de una confirmación Después de empujar todo, ya está reescribiendo la historia por lo que si que asegúrese de entender las implicaciones.

También puede pasar la opción '--no-editar' en lugar de '-m' si prefiere utilizar el mensaje de cometer anterior.

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

Si desea conservar la historia, mostrando la cometió y la operación de revertir, se debe utilizar:

git revert GIT_COMMIT_HASH

entrar en el mensaje que explica por qué estás sonando de nuevo y luego:

git push  

Cuando se emite git log verá tanto el "mal" se comprometen y revertir los mensajes de registro.

Si ya ha empujado, en primer lugar encontrar la confirmación de que deseas estar en CABEZA ($ GIT_COMMIT_HASH_HERE) , a continuación, ejecute el siguiente:

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

A continuación, cada lugar del repositorio ha sido clonado, ejecute:

git reset --hard origin/master

Lo que hago normalmente cuando cometo y empuje (si alguien se abrió cometen este resuelve el problema):

git reset --hard HEAD~1

git push -f origin

esperanza esta ayuda

Reset en rama local

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

fuerza de empuje con el origen

git push -f origin

tener copia de seguridad de su código en la carpeta Temp. Siguiente comando se restablecerá mismo que el servidor.

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

Si desea mantener los cambios y eliminar commits recientes

git reset --soft HEAD^
git pull

borrar local de cometer

Como se puede ver en la imagen que quiero eliminar de reversión "cambio de ensayo 2" comprometerse (ID SHA1: 015b5220c50e3dfbb1063f23789d92ae1d3481a2 (se puede obtener ID SHA1 utilizando el comando gitk en bash GIT)).

Para que puedo usar (todo el trabajo por debajo del comando en sólo locales que necesita para empujar después de borrar.):

  1. git reset --hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2 // de nuevo en marcha que a comprometerse (ID SHA1 de cambio de ensayo 4 es comprometerse 515b5220c50e3dfbb1063f23789d92ae1d3481a2 )
  2. git reset --hard HEAD~1 // de nuevo en marcha antes de que uno se cometió.
  3. git reset --hard HEAD^ // Para extraer la última confirmación de git

después de eliminación:

después de eliminar cometer

Ya he empujado. Necesita devolver algunos commits hacia atrás remotly. Han intentado muchas variaciones, pero sólo este de Justin través de git Bush está trabajando bien para mí:

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

git restablecer --hard

git push origen CABEZA --force

Si uno o más de los comete están etiquetados, borrar la etiqueta (s) en primer lugar. De lo contrario los etiquetados se comprometen a no se elimina.

// 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 git, local y remoto

Suponiendo que no haya empujado al repositorio remoto, se puede volver a clonar el repositorio. Esta ha sido mi método de elección un par de veces.

https://git-scm.com/docs/git-revert .it revertir todo el código a continuación, puede hacer a continuación cabeza commit.Then apuntará a la última confirmación. Revertidos nunca se comete borrar pero no afectará en última comprometerse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top