ultimo - ¿Cómo puedo eliminar un commit en GitHub?
git eliminar commit remoto (21)
Nota: consulte la alternativa a
git rebase -i
en los comentarios a continuación:
git reset --soft HEAD^
Primero, elimine la confirmación en su repositorio local. Puedes hacerlo usando git rebase -i
. Por ejemplo, si es su última confirmación, puede hacer git rebase -i HEAD~2
y eliminar la segunda línea dentro de la ventana del editor que aparece.
Luego, forzar el empuje a GitHub usando git push origin +branchName --force
Consulte el Capítulo 5 de Git Magic: Lecciones de la historia y, a continuación, algunas para obtener más información (es decir, si desea eliminar las confirmaciones más antiguas).
Ah, y si tu árbol de trabajo está sucio, primero debes hacer un git stash
, y luego git stash apply
un git stash apply
.
Yo "accidentalmente" empujé un compromiso a GitHub.
¿Es posible eliminar este commit?
Quiero revertir mi repositorio de GitHub como estaba antes de esta confirmación.
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 que se eliminará es la última confirmada.
1 - Copie la referencia de confirmación a la que desea volver del registro:
git log
2 - Restablecer git a la referencia de confirmación:
git reset <commit_ref>
3 - Guarda / almacena los cambios locales del compromiso incorrecto para usar más tarde después de presionar a remoto:
git stash
4 - Empuje los cambios al repositorio remoto, (-f o --force):
git push -f
5 - Recuperar los cambios almacenados en el repositorio local:
git stash apply
7 - En caso de que haya archivos nuevos / sin seguimiento 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>" .
git log
para descubrir la confirmación que desea revertirgit push origin +7f6d03:master
mientras que 7f6d03 es la confirmación antes de la confirmación errónea.+
fue porforce push
Y eso es.
Here hay una muy buena guía que resuelve su problema, ¡fácil y simple!
Agrega / elimina archivos para obtener las cosas de la manera que deseas:
git rm classdir
git add sourcedir
Luego enmendar el compromiso:
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 empujado. Si ha presionado, entonces solo tendrá que confirmar un arreglo normalmente.
Debe conocer su hash de confirmación del compromiso al que desea revertir. Puede obtenerlo desde una URL de GitHub como: https://github.com/your-organization/your-project/commits/master
Digamos que el hash de la confirmación (a la que desea volver) es "99fb454" (versión larga "99fb45413eb9ca4b3063e07b40402b136a8cf264"), entonces todo lo que tiene que hacer es:
git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force
Ejecuta este comando en tu terminal.
git reset HEAD~n
Puede eliminar las últimas n confirmaciones del repositorio local, por ejemplo, HEAD ~ 2. Procede con la fuerza git push en tu repositorio.
git push -f origin <branch>
¡Espero que esto ayude!
Elimine la confirmación más reciente, conservando el trabajo que ha realizado:
git reset --soft HEAD~1
Elimina la confirmación más reciente, destruyendo el trabajo que has hecho:
git reset --hard HEAD~1
En GitHub Desktop , simplemente puede hacer clic derecho en la confirmación y revertirla, lo que creará una nueva confirmación que deshace los cambios.
La confirmación accidental aún estará en su historial (lo que puede ser un problema si, por ejemplo, ha comprometido accidentalmente una clave de API o contraseña) pero el código será revertido.
Esta es la opción más simple y fácil, la respuesta aceptada es más completa.
Encuentre la especificación de referencia de la confirmación que desea que sea el jefe de su rama en Github y use el siguiente comando:
git push origin +[ref]:[branchName]
En su caso, si solo desea retroceder un compromiso, busque el comienzo del ref para ese compromiso, por ejemplo, es 7f6d03, y el nombre de la rama que desea cambiar, por ejemplo, es maestro, y Haz 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 --force
un compromiso puede reescribir el historial de otras personas y fusionar su sucursal. Sin embargo, si detecta el problema rápidamente (antes de que alguien más fusione su sucursal), no tendrá ningún problema.
Guarda tus 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 el botón "Copiar el SHA completo" para enviarlo al portapapeles.
Si su último hash de confirmación es, digamos g0834hg304gh3084gh (por ejemplo)
Tienes que correr:
git push origin +g0834hg304gh3084gh:master
Usando el hash que has copiado anteriormente para convertirlo en la revisión "HEAD".
Agregue los cambios locales que desee. Hecho ;)
No es muy bueno reescribir la historia. Si usamos git revert <commit_id>
, se crea un compromiso inverso limpio de dicho ID de confirmación.
De esta manera, la historia no se vuelve a escribir, sino que todos saben que ha habido una reversión.
Para GitHub: restablezca sus confirmaciones (HARD) en su repositorio local y cree una nueva rama. Empuje nuevo. Eliminar rama antigua. (Cree una nueva como la rama predeterminada si está eliminando la rama maestra)
Para eliminar la confirmación del repositorio remoto:
git push -f origin last_known_good_commit:branch_name
Para eliminar la confirmación de su repositorio local:
git reset --hard HEAD~1
Para preservar la estructura de ramificación y fusión es importante utilizar la opción --preserve-merges
al realizar la rebase:
git rebase --preserve-merges -i HEAD^^
Para una reversión fácil, si es solo un error (tal vez usted bifurcó un repo, luego terminó empujando 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 confirmación que desea devolver.
Todo desde entonces se eliminará una vez que empujes de nuevo. Para ello, el siguiente paso sería:
git push --force
Si desea eliminar hacer rebase interactiva,
git rebase -i HEAD~4
4 represents total number of commits to display count your commit and
cambiarlo en consecuencia
y elimine la confirmación que desee de la lista ...
guardar cambios con Ctrl + X (ubuntu) o : wq (centos)
2º método, revertir,
git revert 29f4a2 #your commit ID
Esto revertirá el compromiso específico.
Tendrá que borrar su caché para que se borre por completo. esta página de ayuda de git te ayudará. (me ayudó) http://help.github.com/remove-sensitive-data/
Usa git revert
para revertir tu empuje.
git-revert - Revertir algunas confirmaciones existentes
git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>... git revert --continue git revert --quit git revert --abort
Revertir los cambios que introducen los parches relacionados y registrar algunas confirmaciones nuevas que los registran. Esto requiere que su árbol de trabajo esté limpio (sin modificaciones de la confirmación HEAD).
Si está haciendo esto porque tiene datos confidenciales en una confirmación, el uso de las otras respuestas aquí no es seguro (a excepción de subutux, que ampliaré).
La guía github sobre esto recomienda usar una herramienta externa, pero yo prefiero usar la incorporada.
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 diferenciar contra la copia de seguridad.
Si estás 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.
1. git reset HEAD^ --hard
2. git push origin -f
Este trabajo para mí.
git push -f origin HEAD^:master
Eso debería "deshacer" el empuje.