Tengo un proyecto en un repositorio remoto, sincronizado con un repositorio local (desarrollo) y el servidor (prod). He estado haciendo algunos cambios comprometidos que ya se enviaron al control remoto y se retiraron del servidor. Ahora, quiero deshacer esos cambios. Así que podría git checkout
confirmar antes de los cambios y confirmar los nuevos cambios, pero supongo que habrá problemas para empujarlos nuevamente al control remoto. ¿Alguna sugerencia sobre cómo debo proceder?
610
Respuestas:
Puede revertir confirmaciones individuales con:
Esto creará una nueva confirmación que revierte los cambios de la confirmación que especificó. Tenga en cuenta que solo revierte esa confirmación específica, y no confirma después de eso. Si desea revertir un rango de confirmaciones, puede hacerlo así:
Revierte las confirmaciones entre e incluyendo las confirmaciones especificadas.
Mire la página de manual de git-revert para obtener más información sobre el
git revert
comando. También mire esta respuesta para obtener más información sobre la reversión de confirmaciones.fuente
git log
<oldest_commit_hash>
incluido en la lista deUna solución que no guarda rastros de "deshacer".
NOTA: no haga esto si alguien ya retiró su cambio (usaría esto solo en mi repositorio personal)
hacer:
esto volverá a verificar todas las actualizaciones localmente (por lo que el estado de git enumerará todos los archivos actualizados)
luego "hace su trabajo" y vuelve a confirmar sus cambios (Nota: este paso es opcional)
En este momento su árbol local difiere del remoto
presionará y forzará el control remoto para considerar este impulso y eliminará el anterior (especificar el nombre remoto y el nombre de la sucursal no es obligatorio, pero se recomienda evitar actualizar todas las sucursales con el indicador de actualización).
!! cuidado, algunas etiquetas todavía pueden estar apuntando eliminado commit !! cómo-eliminar-una-etiqueta-remota
fuente
git push -f
última confirmación correcta y el historial remoto se limpió! ¡Gracias!Lo que hago en estos casos es:
En el servidor, mueva el cursor hacia la última confirmación válida conocida:
Localmente, haz lo mismo:
Vea un ejemplo completo en una rama
my_new_branch
que creé para este propósito:Esta es la historia reciente después de agregar algunas cosas a
myfile.py
:Quiero deshacerme del último commit, que ya fue empujado, así que ejecuto:
¡Agradable! Ahora veo que el archivo que fue cambiado en ese commit (
myfile.py
) se muestra en "no efectuado para commit":Como no quiero estos cambios, simplemente muevo el cursor hacia atrás localmente también:
Entonces, HEAD está en el commit anterior, tanto en local como remoto:
fuente
Puede REVERTAR (o también puede llamarlo ELIMINAR ) el Git Commit AMBOS localmente y remotamente si sigue los pasos que se indican a continuación a través de la línea de comando git.
Ejecute el siguiente comando para ver la identificación de confirmación que desea revertir
Obtendrá como una siguiente captura de pantalla
Si también marca el control remoto (a través de la interfaz web) , puede ver que esto sería lo mismo que se muestra a continuación
Según la captura de pantalla, actualmente se encuentra en commit id e110322, sin embargo, desea volver a 030bbf6, tanto LOCAL como REMOTAMENTE .
Realice los siguientes pasos para BORRAR / REVERTIR confirmaciones localmente + remotamente
Primero volviendo localmente a commit id 030bbf6
seguido por
Estos dos comandos limpian el restablecimiento de la fuerza para comprometer la etapa 030bbf6 como se muestra a continuación en la instantánea
ahora si ejecuta el estado de git, verá que está DOS confirmaciones DETRÁS de la rama remota como se muestra a continuación
Ejecute siguiente para actualizar sus índices (si hay alguna actualización). Se recomienda que solicite a todos los desarrolladores que no acepten ninguna solicitud de extracción en la rama remota principal.
Una vez que haya terminado con él, entonces debe presionar este compromiso con fuerza usando el símbolo + delante de la rama como se muestra a continuación. Lo he usado aquí como rama maestra , puede reemplazarlo con cualquier
Código
ahora, si ve la interfaz web del control remoto, entonces confirme allí también debería revertirse.
fuente
Esto eliminará tus commits empujados
fuente
En la línea de código anterior. "El último argumento representa"
1: revierte uno confirma.
2: revierte las dos últimas confirmaciones.
n: revierte los últimos n commits.
Debe presionar después de este comando para que surta efecto en el control remoto. Tiene otras opciones, como especificar el rango de confirmaciones para revertir. Esta es una de las opciones.
Uso posterior
git commit -am "COMMIT_MESSAGE"
entoncesgit push
ogit push -f
fuente
git revert ref1..ref2
2020 forma simple:
(El hash de la última confirmación que desea mantener).
Mantendrá los cambios ahora no confirmados localmente.
Si quiere presionar nuevamente, debe hacer:
fuente
Aquí está mi camino:
Digamos que el nombre de la rama es
develop
.fuente
Puedes hacer algo como
fuente