Pregunta

I "accidentalmente" empujó un commit a GitHub.

Es posible quitar este commit?

Quiero volver a mi repositorio de GitHub como era antes de esta confirmación.

¿Fue útil?

Solución

Nota: por favor, consulte la alternativa a git rebase -i en los comentarios de abajo—

git reset --soft HEAD^

En primer lugar, extraiga el commit en el repositorio local.Usted puede hacer esto utilizando git rebase -i.Por ejemplo, si es su último commit, usted puede hacer git rebase -i HEAD~2 y eliminar la segunda línea dentro de la ventana del editor que aparece.

Entonces, la fuerza de empuje a GitHub mediante el uso de git push origin +branchName --force

Ver Git Magia Capítulo 5:Lecciones de la Historia - Y, a Continuación, Algunos para obtener más información (es decir,si desea quitar mayores confirma).

Oh, y si el árbol de trabajo es sucio, usted tiene que hacer un git stash en primer lugar, y luego un git stash apply después.

Otros consejos

git push -f origin HEAD^:master

Eso debería " deshacer " el empujón.

Para una reversión fácil si es solo un error (tal vez bifurcó un repositorio, luego terminó presionando al original en lugar de a uno nuevo) aquí hay otra posibilidad:

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

Obviamente, intercambie ese número por el número de la confirmación a la que desea regresar.

Todo desde entonces se eliminará una vez que presione de nuevo. Para hacer eso, el siguiente paso sería:

git push --force
  1. git log para averiguar la confirmación que desea revertir

  2. git push origin +7f6d03:master mientras que 7f6d03 es el commit antes del commit empujado incorrectamente. + fue para force push

Y eso es todo.

Aquí es una muy buena guía que resuelve su problema, ¡fácil y simple!

En caso de que desee mantener los cambios de confirmación después de la eliminación:

Tenga en cuenta que esta solución funciona si la confirmación a eliminar es la última confirmada.


1 - Copie la referencia de confirmación a la que desea volver desde el registro:

git log

2 - Restablece git a la referencia de confirmación:

 git reset <commit_ref>

3 - Guarde / almacene los cambios locales de la confirmación incorrecta para usarlos más tarde después de presionar en remoto:

 git stash

4 - Empuje los cambios al repositorio remoto, (-f o --force):

git push -f

5 - Recupere los cambios almacenados en el repositorio local:

git stash apply

7 - En caso de que haya un seguimiento / archivos nuevos en los cambios, debe agregarlos a git antes de confirmar:

git add .

6 - Agregue los cambios adicionales que necesite, luego confirme los archivos necesarios (o use un punto '.' en lugar de indicar cada nombre de archivo, para confirmar todos los archivos en el repositorio local:

git commit -m "<new_commit_message>" <file1> <file2> ...

o

git commit -m "<new_commit_message>" .

Tendrá que borrar su caché para borrarla por completo. esta página de ayuda de git te ayudará. (Me ayudó) http://help.github.com/remove-sensitive-data/

Use git revert para revertir su empuje.

  

git-revert - Revierte algunas confirmaciones existentes

git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>...
git revert --continue
git revert --quit
git revert --abort

Revierta los cambios que introducen los parches relacionados y registre algunas confirmaciones nuevas que las registren. Esto requiere que su árbol de trabajo esté limpio (sin modificaciones de la confirmación HEAD).

1. git reset HEAD^ --hard
2. git push origin -f

Esto funciona para mí.

Para eliminar la confirmación del repositorio remoto:

 git push -f origin last_known_good_commit:branch_name

Para eliminar el commit de su repositorio local:

git reset --hard HEAD~1

enlace

Elimine la confirmación más reciente, manteniendo el trabajo que ha realizado:

git reset --soft HEAD~1

Elimine la confirmación más reciente, destruyendo el trabajo que ha realizado:

git reset --hard HEAD~1

Encuentre la especificación de referencia del commit que desea que sea el jefe de su sucursal en Github y use el siguiente comando:

git push origin +[ref]:[branchName]

En su caso, si solo desea retroceder una confirmación, busque el comienzo de la referencia para esa confirmación, por ejemplo, digamos que es 7f6d03, y el nombre de la rama que desea cambiar, digamos por ejemplo que es maestro, y haga lo siguiente:

git push origin +7f6d03:master

El carácter más se interpreta como --force, que será necesario ya que está reescribiendo el historial.

Tenga en cuenta que cada vez que <=> realice una confirmación, podría volver a escribir la historia de otras personas que fusionen su sucursal. Sin embargo, si detecta el problema rápidamente (antes de que alguien más combine su sucursal), no tendrá ningún problema.

Debe conocer su hash de confirmación del compromiso al que desea volver. Puede obtenerlo de una URL de GitHub como: https://github.com/your -organization / your-project / commits / master

Digamos que el hash del commit (al que desea volver) es " 99fb454 " (versión larga " 99fb45413eb9ca4b3063e07b40402b136a8cf264 "), entonces todo lo que tiene que hacer es:

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force

Si está haciendo esto porque tiene datos confidenciales en una confirmación, usar las otras respuestas aquí no es seguro (excepto los subutux, que ampliaré).

La guía de github sobre esto recomienda usar una herramienta externa, pero yo prefiero usar el incorporado.

En primer lugar, haga una copia de seguridad de su repositorio . Entonces:

git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \
--prune-empty --tag-name-filter cat -- --all

Después de esto, asegúrese de que el repositorio esté en el estado que desea . Es posible que desee diferenciarse contra la copia de seguridad.

Si está seguro de que es correcto, entonces:

#get rid of old unreferenced commits (including the data you want to remove)
git gc --prune=now
git push origin --force --all

Es posible que desee mantener la copia de seguridad local por un tiempo, por si acaso.

Ejecute este comando en su terminal.

git reset HEAD~n

Puede eliminar las últimas n confirmaciones del repositorio local, p. CABEZA ~ 2. Continúe con force git push en su repositorio.

git push -f origin <branch>

¡Espero que esto ayude!

Para preservar la estructura de bifurcación y fusión, es importante utilizar la opción --preserve-merges al realizar el rebase:

git rebase --preserve-merges -i HEAD^^

Guarde sus cambios locales primero en algún lado (copia de seguridad)

Puede examinar sus confirmaciones recientes y luego seleccionar un hash de confirmación haciendo clic en " Copie el SHA " completo; botón para enviarlo al portapapeles.

Si su último hash de confirmación es, digamos g0834hg304gh3084gh (por ejemplo)

Tienes que ejecutar:

git push origin +g0834hg304gh3084gh:master

Usando el hash que ha copiado anteriormente para convertirlo en " HEAD " revisión.

Agregue los cambios locales que desee. Listo;)

Para GitHub

  • Restablece tus commits (HARD) en tu repositorio local
  • Crear una nueva sucursal
  • Empuje la nueva rama
  • Eliminar rama antigua (Hacer una nueva como rama predeterminada si está eliminando la rama maestra)

si desea eliminar hacer rebase interactivo,

git rebase -i HEAD~4

4 represents total number of commits to display count your commit and cámbielo en consecuencia

y elimine la confirmación que desee de la lista ...

guardar los cambios con Ctrl + X (ubuntu) o :wq(centos)

Segundo método, revertir,

git revert 29f4a2 #your commit ID

esto revertirá la confirmación específica

No es muy bueno reescribir el historial. Si usamos git revert <commit_id>, crea una confirmación inversa limpia de dicha identificación de confirmación.

De esta manera, el historial no se reescribe, en cambio, todos saben que ha habido una reversión.

Agregue / elimine archivos para obtener las cosas de la manera que desee:

git rm classdir
git add sourcedir

Luego modifique la confirmación:

git commit --amend

La confirmación errónea anterior se editará para reflejar el nuevo estado del índice; en otras palabras, será como si nunca hubiera cometido el error en primer lugar

Tenga en cuenta que solo debe hacer esto si aún no ha presionado. Si ha presionado, solo tendrá que realizar una corrección normalmente.

En GitHub Desktop puede hacer clic derecho en el compromiso y revertirlo, lo que creará un nuevo compromiso que deshace los cambios.

La confirmación accidental seguirá estando en su historial (lo que puede ser un problema si, por ejemplo, ha cometido una clave o contraseña API accidentalmente) pero el código se revertirá.

Esta es la opción más simple y fácil, la respuesta aceptada es más completa.

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